Perl
- NET::SFTP::FOREIGNについて
NET……FOREIGNを使って、ファイルのパーミッション(アクセス権)を変えようと試みましたが、変えられませんでした。 いや、変更は可能なのですが、意図したパーミッションになりません。 例えば、0755とすると、0363となります。 Perlのフォームデータから755と送られてきたときに正常に変更させるにはどうしたらいいですか? ちなみに、直接数値でなら正常に変更できます。 簡略しますが…… <input type="text" name="chmod" value="任意の数値"> このデータを受け渡し…… sftp->chmod("ファイル名", $FORM{'chmod'}); とすると、例えば任意の数値が0755だと、0363となり、うまく変更できません。 なにが原因かわかる方いらっしゃいますかね?
- NET::SFTP::FOREIGN
perlモジュールのnet::sftp::foreignについてですが、$sftp->chmodと打っても、サーバ上のファイルのパーミッションを変えることができません。 $sftp->にchmodのコマンドは使えないのですか? また、パーミッションを変えるコマンドが他にある場合、それも教えて下さい。
- 日本語ドメインか16進数かで別物になる
サーチコンソールに下記のように出てしまいます。 参照元ページ https://www.就~.tokyo/html/link.html ユーザーが指定した正規 URL https://xn~.tokyo/html/link.html 日本語ドメインなので、日本語のドメイン名と、16進数のドメイン名が別物として認識されているようです。 もちろん、ドメイン名は全く同じで違いは16進数かそうでないかだけです。 参照元ページ https://www.就~.tokyo/html/link.html ユーザーが指定した正規 URL https://xn~.tokyo/html/link.html この場合もリダイレクトなのですか? もちろん https://xn~.tokyo/html/link.html でアクセスしてもちゃんと同じページが出てきます。 なぜ同じなのに日本語ドメインか16進数かで別物と検索エンジンは思ってしまったのでしょうか? どうすれば同じに出来ますか?
- 締切済み
- Perl
- webpageyou123
- 回答数3
- JSON Perlで指定のデータのみ抽出
恐れ入ります。 {"num":29,"name","山田太郎"}{"num":30,"name","山田花子"}{"num":31,"name","山田次郎"} というJSONデータを読み込むことは出来たのですが、 この中からnumを、例えば29と指定したら、 {"num":29,"name","山田太郎"}のみが表示される形にしたいのですが、方法が分かりません。 宜しくお願い致します。
- Perl ローカル運用 exe起動
恐れ入ります。現在anhttpdでperlプログラムをローカルマシン(windows10)で作成しているのですが、perl実行時に、ローカルのコマンドを実行したいのですが、どのようにしたら良いか分かりません。 具体的には、bitsadmin.exeを使ってグローバル上の特定のファイルをローカルフォルダにダウンロードするイメージです。 以上宜しくお願い致します。
- Perl cookie 削除か書込
Perl cookie cookie→NAMEというクッキーデータを 削除か、まったく別のものに書き換えたいのですが、どうすればいいのでしょうか? 現在はJavaScriptで書き込んでいるのですが、 <script> \$(function(){ \$('#NAME).val(\$.cookie("NAME")); \$("#Login").click(function(){ \$.cookie("NAME",\$('#NAME).attr('value'), { expires: 365 }); location.href="$MYURL" }) }) </script> Perl ソース中で、PerlでこのNAMEを消したい 瞬間があります。 もしくは、書き換えたいです。 やりかたを教えて下さい。 調べてはいるものの うまくいきません。
- Perl の use strict に付いて
●HTML <html><head> <meta http-equiv="content-type" content="text/html;charset=UTF-8" /> <title>テスト5(UTF-8)</title> </head> <body> <form action="test5.cgi" method="post" > <input type="text" name="f1" value="" size="80"> <button type="submit" >送信</button> </form> </body></html> —————————————————————————————————————— ●Perl #!/usr/bin/perl #use strict; ※問題の行1 use warnings; use CGI; print "Content-type: text/html\n\n"; print "<meta charset=\"UTF-8\">\n"; # POST / GET パラメータを取得------------------------- my $q = new CGI; # パラメータ名を指定して取得する my $param1 = $q->param('name1'); my $param2 = $q->param('name2'); # FORM値の取得----------------------------------- # 全てのパラメータを取得する for my $param_name ($q->param) { print $param_name . ' = ' . $q->param($param_name) ; print "<br>\n"; ${$param_name} = $q->param($param_name); ※問題の行2 } #------------------------------------------------- print "テスト<hr>\n"; print "$f1<br>\n"; exit; —————————————————————————————————————— 【質問】 「※問題の行1」+「※問題の行2」 = エラー 「※問題の行1」のみ = 正常に動きます 「※問題の行2」のみ = 正常に動きます 「※問題の行1」の「use strict; 」と 「※問題の行2」の「${$param_name} = $q->param($param_name); 」 をどう書き換えれば、二つとも記述したまま正常に動くのでしょうか? よろしくお願いします。
- perl print文で日本語表示するには
perlのプログラムで use utf8が宣言されていない時(test1.pl)は、 print文で日本語が正しく表示されるのですが、 use utf8が宣言されている時(test2.pl)は、 print文で日本語が正しく表示されないかエラーになります。 encode('utf-8', $string)やencode('cp932', $string) も試してみましたがうまくいきませんでした。 どのようにすればよいでしょうか。 ---test1.pl------------------------------------------------ #!C:/perl/bin/perl use strict; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; print $string; ----------------------------------------------------------- 実行結果 OK 2018年12月26日 9時36分6秒 ----------------------------------------------------------- ---test2.pl------------------------------------------------ #!C:/perl/bin/perl use strict; use utf8; use Encode; my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); $year += 1900; $mon += 1; my $string="$year年$mon月$mday日 $hour時$min分$sec秒\n"; print $string; #print encode('utf-8', $string); #print encode('cp932', $string); --------------------------------------------------- 実行結果 NG (PC1 Windows7 ActivePerl) Wide character in print at D:\test\test2.pl line 11. Global symbol "$year年" requires explicit package name (did you forget to declare "my $year年"?) at D:\test\test2.pl line 8. Global symbol "$mon月" requires explicit package name (did you forget to declare "my $mon月"?) at D:\test\test2.pl line 8. Global symbol "$mday日" requires explicit package name (did you forget to declare "my $mday日"?) at D:\test\test2.pl line 8. Global symbol "$hour時" requires explicit package name (did you forget to declare "my $hour時"?) at D:\test\test2.pl line 8. Global symbol "$min分" requires explicit package name (did you forget to declare "my $min分"?) at D:\test\test2.pl line 8. Global symbol "$sec秒" requires explicit package name (did you forget to declare "my $sec秒"?) at D:\test\test2.pl line 8. Execution of D:\test\test2.pl aborted due to compilation errors. ----------------------------------------------------- 実行結果 NG (PC2 Windows7 ActivePerl) Malformed UTF-8 character (unexpected continuation byte 0x94, with no precedingstart byte) at C:\test\test2.pl line 8. (略) Malformed UTF-8 character (unexpected continuation byte 0x95, with no precedingstart byte) at C:\test\test2.pl line 8. 2018 N12 26 9 5 4 b ----------------------------------------------------- 期待している実行結果 2018年12月26日 9時36分6秒 ----------------------------------------------------- よろしくお願いします。
- Perl 文字の中にある複数ワードを1つにしたい
教えてほしいです。 $text = "1テストp41p2Ap2、テストp22、p4テストp2testp4w"; @M = ("p4","p2"); 上記の2つの変数から 下記のようにする方法はありますでしょうか? $text = "1テストp41p2A、テストp22、p4テストtestw"; ※消したいワード [p4][p2]が複数ある場合 配列内の文字が複数ある場合、最初の一致だけを残しあと消す。 ※[p41][p22]などの2桁の数値は消さない
- CGIで受け取った日本語文字列を正規表現で
perlでcgiを作っています。 テキストボックスに入れてもらった文字列から正規表現で数字を抽出します。 以下のように、組むと "USA"のような半角英数はただしくマッチしますが、 "アメリカ"や"ドル"などはマッチしません。簡単に解決する方法をお教えください。 my $text = $in_data{'data_text'}; $text =~ tr/+/ /; $text =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; $text =~ s/[<>"'&\r\n]//g; $text =~ s/&/&/g; $text =~ s/</</g; $text =~ s/>/>/g; $text =~ s/"/"/g; $text =~ s/'/'/g; $text =~ s/\r\n/<br>/g; $text =~ s/\n/<br>/g; $text =~ s/\r/<br>/g; if ($text =~ /USA (\d+) dollars/){ print "USA $1\n"; } if ($text =~ /アメリカ (\d+\.\d+) ドル/){ print "アメリカ $1\n"; } exit;
- Perl 先頭行に追加
恐れ入ります。 Perlで、配列がカンマで区切られたデータを読み込み、 その先頭行にデータを挿入したいのですが、 中々うまくいきません。 データ(/data/xxx.txt)の中身は、 test,test2 bbb,bbb2 ccc,ccc2 という感じで、カンマで区切られて改行で並んでいます。 そこに新たに$dateと$contで受けたデータを先頭行に追加する感じです。 open(FILE,"<./data/xxx.txt"); while($temp = <FILE>){ @temp=split(/,/,$temp); push(@ddr,"$temp[0]","$temp[1]"); } seek(@ddr,0,0); unshift(@ddr,($date,$cont."\n")); open(FILE,">./data/xxx.txt"); $new=join(",",@ddr); print FILE $new; close(FILE); このように書いていますが、 print FILE @ddr とすると、配列が壊れた状態(全て繋がる)で先頭行には挿入されたのですが、カンマで区切って配列にして並べようとしたら、 test,test2 ,bbb,bbb2, ,,ccc,ccc2,, という感じで上手く並びません。 よろしくおねがいします。
- [Perl]XML::SimpleでSJIS
Windows7、ActivePerl v5.24.1を使っています。 use XML::Simple; use Data::Dumper; my $data = XMLin('test.xml'); print Dumper($data); というコードで、以下のXMLファイルを読み込むと、 <?xml version="1.0" encoding="shift_jis"?> <root> <top id="1234"> <second>値</second> <third> <fourth>1234</fourth> <fifth>myvalue</fifth> </third> </top> </root> Couldn't open encmap shift_jis.enc: No such file or directory at C:/Perl/lib/XML/Parser.pm line 187. XML::Simple called at read_xml_test.pl line 10. というエラーがでます。 ググると、以下のサイトで解決できたという記事がヒットしますが このサイトはもう存在しません。 Perl XMLでencoding=’Shift_JIS’や’euc-jp’を使う http://homepage3.nifty.com/hippo2000/perltips/xml/xmlenc.htm なにかコード間のマップファイルと思われますが、 どなたかお持ちじゃないでしょうか?
- Perl 高速でファイルを結合させたい
ある集計データを作成しているのですが、 とにかく遅いです。 下記のソースで、繰り返しファイルをオープンさせ 結合を繰り返しているからでしょうが これを早くするにはどうすればいでしょうか? ※やりたいことは実際はできております。 まず条件として ディレクトリのデータは数年分あり 今回は、4年分の統計を取りたい。 →2018年度、2017年度、2016年度、2015年度 ディレクトリのファイルの数、ファイルの名前は一緒(例は数字ですが、基本名前です) →ファイルの数は15個 →ファイル容量 大きいので1500kbの約2万行 少ないので600kbほど 合計ファイル容量1年分→1mbほど 4年分になると4mb(単純計算) 平均ファイル容量750kbほど my @DATAFILE; my @FILENAME = ("T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","T13","T14","T15"); my $Year = 2018; my $YearM = $Year - 3; for(my $i=0;$i<=$#FILENAME;$i++){ my $FILE = $FILENAME[$i]; chomp($FILE); for(my $pr=$YearM;$pr<=$Year;$pr++){ open(FILE, "<","data/log/$pr/$FILE.txt"); eval{ flock(FILE, 1) }; my @DATASUM = <FILE>; close FILE; push @DATA,@DATASUM; } } どうか改善方法を教えください。
- 締切済み
- Perl
- programstudy11
- 回答数3
- perl utf8ファイル処理について
ファイルがutf8で作成されています。 open処理にて、utf8をshifjisに変換して処理する事って出来ますか。 今の所は、utf8のファイルを入力して、shiftjisに変換して、outputして、 それを読み込んで処理してます。 やはりこれ以外の方法はないでしょうか。
- WindowsでのPerl開発環境
Windows7/10上のPerlでのwebアプリに関するベストな開発環境を知りたいです。 実行環境イメージは、50画面相当ある中大規模webアプリで、windows server + apache + oracle使用です。 当方、JSF(primefaces)によるweb開発は経験がありますが、Perlは初めてです。 Perlについて、webで検索、模索していて少し不安になってきたので、下記質問に回答ください。 1)Perlの現況 web検索すると、古い記述ばかり目につき、PHPなどに比べると、言語自体が衰退している様な気がしますが、そんなことはないでしょうか?現時点でこの規模のアプリ開発言語にPerlを選択する事に疑問を感じています。 2)開発環境 少し調査した段階ですが、Eclipse(EPIC)がいいのかなと思ってます。もちろん、これに限らず、これがベスト!というのがあれば教えてください。 3)その他開発環境 MVCパターンで実装したいので、更にCatalyst or Mojoliciousを導入すべきなのかな?と思っています。使い勝手などいろいろな側面からベストなものを教えてください。 更に、リッチコントロール(たとえば、グリッドコントロールの様な)が簡単に扱えるようなライブラリ?みたいなお勧めがあれば教えてください。 4)Perl素人への注意事項 Perlでのweb開発時の注意事項などありましたら、教えてください。 5)PerlとJSF 双方経験がある方のみにお聞きします。 当方はNetBeans(Eclipseではなく)でJSFのwebアプリ開発時にストレスなく作業が行えた記憶があります。Perlだとこういうところが優れている、劣っているなど、意見を聞きたいです。特に双方同レベルのスキルがある人が同じアプリを作るとした場合、開発工数に違いがあるか否か(理由も)が知りたいです。
- 指定のinputに入力
恐れいります。 <form action="./xxx.cgi" method="POST"> <input type="text" name="name1"> <input type="text" name="name2"> <input type="text" name="name3"> <input type="text" name="name4"> <input type="text" name="name5"> <input type="submit" value="送信"> </form> と、5つの入力欄があり、別ウィンドウから、指定の場所に代入することは可能でしょうか。例えば、name1のエリアに、別ウィンドウからformで「test」という文字を送信して入力する感じです。 よろしくお願いします。
- さくらインターネット sendmail
恐れ入ります。 さくらインターネットでperlを使い、HTML上からsendmail送信をしているのですが、 送信元のFromの内容が、私のドメイン xxxx@xxxx.xx で記述してもwww234.sakura.ne.jpのようにさくらインターネットのドメインが付いてしまいます。 どのようにしたら良いのかがわかりません。 ご教授頂けたらと思います。 宜しくお願いします。
- Perl ページ表示遅い ループの改善
ソースが汚いかもしれませんが、ご教示お願い致します。 実行したいことは、できてはいるのですが、 「表示が遅い」です。 ループのやり探し、 サーバー上でのHTML生成が 原因だと思うのですが、 どう改善すればいいのかわかりません・・・ ・下記のソースの簡単な説明 あるテキストファイルにCSV方式でデータを記録してあります。 (最終で200万バイトくらい) (現在 12万バイト) そのデータで1列目に順位の数字があり (~20位前後) それを、いろんな条件で絞込し一気に表示してます。 そこから、サーバー上でテーブルとして表示させているのですが とにかく遅いです。 ・・・サーバー上で計算するからでしょうが・・・ もう少し速くする方法はないでしょうか? スクリプトでHTMLを生成させることはできるのですが、 サーバーにデータのみを保存させ そこから生成させたいのです・・・ ※だいたい10秒前後(Wi-Fi有りで) Wi-Fiの環境がなく、さらに回線が3Gまでに なっている人だと絶望的な状況だと・・・ 下記のソースで、 (1)おかしな点 (2)改善すれば速くなる点 (3)別の案 を教えてほしいです・・・ ------ソース------ my @DataNo = ("13","14","2","1","8"); my $DataName; for(my $dn=0;$dn<=$#DataNo;$dn++){ my $DataNo = $DataNo[$dn]; my ($No) = split(/,/, $DataNo); if($No eq "13"){ $DataName = "A" } if($No eq "14"){ $DataName = "B" } if($No eq "2"){ $DataName = "C" } if($No eq "1"){ $DataName = D" } if($No eq "8"){ $DataName = "E" } print <<END; <h2 class="ResMidashi"> $DataNameデータ</h2> <table class="ResultData"> <tr> <td>[$DataName]</td> <th>Test1</th> <th>Test2</th> <th>Test3</th> </tr> END my %hash = (); my @arrey; open(F, "<","../Test/Test.txt") or die("error :$!"); eval{ flock(F, 1) }; while(<F>){ chomp; my @temp1 = split /,/; push @arrey , $temp1[$No]; } close F; foreach (@arrey) { $hash{$_}++; } my @Data; if($No eq "1" || $No eq "2" || $No eq "9"){ @Data = sort keys %hash; } else{ @Data = reverse sort keys %hash; } my $matches = 0; my $Count1 = 0; my $Count2 = 0; my $Count3 = 0; for(my $Co=0;$Co<=$#Data;$Co++){ my $DATA = $Data[$Co]; my ($Main) = split(/,/, $DATA); open(F, "<","../Test/Test.txt") or die("error :$!"); eval{ flock(F, 1) }; while(<F>){ chomp; my @temp2 = split /,/; if( $temp2[5] eq "$JoukenA" and $temp2[6] eq "$JoukenB" and $temp2[7] eq "$JoukenC"){ if( $temp2[$No] =~ /^$Main$/ ){ $matches++; $Count1++ if $temp2[0] == "1"; $Count2++ if $temp2[0] == "2"; $Count3++ if $temp2[0] == "3"; } } } my $T;my $P; if($matches){ $T = ($Count1 / $matches) * 100; $T = sprintf('%.2f', $T); $P = (($Count1 + $Count2 + $Count3) / $matches) * 100; $P = sprintf('%.2f', $P); my $Frame1;my $Frame2; if($Puk ne "0.00"){ print <<END; <tr> <td>$Main</td> <th>$Count1-$Count2-$Count3-$matches</th> <th>$T</th> <th>$P</th> </tr> END } } $matches = 0; $Count1 = 0; $Count2 = 0; $Count3 = 0; if($Co eq $#Data){last;} } print <<END; </table> END }
- ベストアンサー
- Perl
- MarunageGomen3
- 回答数2
- Perl ランク付け
名前,順位,点数...etc とテキストファイルにあるなかで、 山本,2,74 鈴木,1,98 山田,3,54 鈴木,1,99 山田,1,100 この場合、1位の数が誰が多いのかを調べたいのですが、 まず for my $D_1(@DATA){ my @temp = split/,/, $D_1; if($temp[1] =~ /1$/){ push(@D_1,$D_1); } } print @D_1; これで、 結果↓ 鈴木,1,98 鈴木,1,99 山田,1,100 このように抽出させたのですが、 ここから、1位が多い人 すなわち、鈴木という値がほしいのですが、どうすればいいのでしょうか?
- 締切済み
- Perl
- MarunageGomen3
- 回答数1