Perl
- Perl 特定のタグ内を置換しない
恐れ入ります。特定のhtmlタグ具体的には<h3></h3>タグないの文字列だけを除いて置換を掛けたいのですがなかなかうまくいきません。 $temp = s/[^<h3>(.+?)<\/h3>]$mojiretu1/<a href="$mojiretu2">リンク先</a>/; とした場合、<h3>タグ内の置換はされないようですが、置換後のリンク先の先頭部分が文字化けを起こしてしまいます。原因が分かる方いらっしゃいましたらご教授いただけたら助かります。 よろしくお願いいたします。
- perl 次ページ前ページの応用
perlでファイルデータを読み込みます。 ファイルの中にこのようなデータがあったとします。 1行目 2行目 3行目 4行目 5行目 これを例えば、3行目を読み込んであげて、その前後の2行目と4行目のデータだけを結果として出力するスクリプを教えてほしいです。 ちなみに、1行目だったら2行目のみ、5行目だったら4行目のみの出力です。 あらゆる解説サイトを探しましたが、うまくできるソースコードが見つかりませんでした。 よろしくお願いします。
- perl Image::Magick
恐れ入ります。perlでImage::Magickで画像の処理をしているのですが、画像によって途中までしか変換されていなかったりする画像(下部分が灰色)のものが出ます。この原因と対策をご存じの方はいらっしゃいますか? $filename = "./folder/image.jpg"; $filename 2= "./folder2/image.jpg"; $image = Image::Magick->new; $image->Read("$filename"); $width = $image->Get('width'); $height = $image->Get('height'); $image -> Set( quality => 60 ); $image->Write("$filename2"); 以上のようにしています。HTMLからファイルを受け取る部分は、 my ($query,$fileName); $query = new CGI; $fileName = $query->param('fileName'); open(OUT, ">./folder/image.jpg"); binmode(OUT); while(read($fileName, $buffer, 2048)) { print OUT $buffer; } としています。HTMLからのアップロードは、対象フォルダの画像を確認した場合問題無くアップされています。以上よろしくお願いいたします。
- perl:2次元配列の値の取り出し方
お世話になります。Perlの2次元ハッシュ配列の値の取り出し方をお教えください。以下の コード中、%test だと、値を入れるのが煩雑になるので、%test2や%test3のようなコードにしようと思うのですが、入れた値をとりだすコードが分かりません。。。ご指導ください。 my %test; $test{'A'}{'a'} = 1; $test{'A'}{'b'} = 2; my %test2 = ( 'P' => ['a'=>1, 'b'=>2], 'Q' => ['a'=>3, 'b'=>4] ); my %test3 = ( 'P' => ('a'=>1, 'b'=>2), 'Q' => ('a'=>3, 'b'=>4) );
- webに表をつくる(<table>ではなしに)
htmlをperl cgiで作っています。 +-----------------+--------------+--------------+ | 75.3cm | 32.0 kg | 34 cm | +-----------------+--------------+--------------+ みたいな + と ---- でできた表を作りたいです。 <table>でつくった表は、コピペしたときに、表ではなくなって しまいますので。 しかし + と ---- でできた表が思うようにできません。 printfとかで スペースを含めた文字数をそろえようと思ったのですが htmlではスペースが詰められてしまいますので。 どうすればよろしいでしょうか。
- forkでプリント結果の違い
文末改行無しの動きがわかりません $pid = fork; if($pid){ Pid(1); wait; }else{ Pid(2); } sub Pid{ print"#$_[0]\n&"; #print"#$_[0]\n&\n"; }
- メールフォーム
#!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $to = '*********@*****************'; #$from = ''; $subject ='************'; # メール送信 open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae<br><br>"; print " $naiyou<br><br>"; print "メールを送信しました<br>"; exit HTMLで<textarea rows="6" cols="60" wrap="hard" required name="naiyou"> としたのですが Perlで確認表示の$naiyouの所が英語も日本語は改行されません。
- Perl WWW::Mechanize
恐れ入ります。WWW::Mechanizeを使って下記のサイトにアクセスしようとしても開くことが出来ません。業務上自動化したい部分があるのですが、画面が開かず、ロード中のままで開かない状態です。その他のサイトでは開くことが可能です。よろしくお願いいたします。 $url[0] = "https://salonboard.com/"; ← 開かない $url[1] = "https://www.google.com"; ← 開く my $mech = WWW::Mechanize->new( agent=>"Mozilla/5.0 (Windows NT 10.0; Win64; x64) " ); my $response = $mech->get( $url[0] ); print "Content-type: text/html;\n\n"; print $mech->content;
- 条件分岐での排他的な論理和について
$aが 'abc' 'xyz' 以外の時に実行したい場合の条件分岐。 ついついこんな風に書いて間違えてしまいます。 if( $a ne 'abc' || $a ne 'xyz' ){...} 上記だと論理和左側のneが真を返すので、右側の条件を見てくれないから仕方なくunlessを使います。 unless( $a eq 'abc' || $a eq 'xyz' ){...} でも私、unlessが嫌いなんです。 if文で書く最も処理が高速でスマートな方法教えて下さい。 部分一致ではないので正規表現は使いたくありませんが 比較演算子を使うより正規表現を使ったほうが処理が高速な場合は正規表現も有りでお願いします。
- 日本人の名前かアルファベットかをperlで判定する
csvファイルを読み込んで、その中の名前欄がアルファベットか、あるいはそうではない(ひらがな、かたかな、漢字)かを判定するPerlプログラムを作ろうとしました。 if ( $name =~ /[A-Z]+/ ) とかすると、日本の名前でもアルファベットの名前でもヒットしてしまいます。 コードの問題かと思い、 https://tutorial.perlzemi.com/blog/20091118124667.html に従って perlコードをUTF-8で保存し、 読み込んだ名前文字列は $name = decode('UTF-8', $name); してみたのですが、やはり日本の名前の半数近くがヒットしてしまいます。 どうすればよろしいでしょうか。
- Perl/CGIについて
#!/usr/bin/perl use CGI; $cgi = new CGI(); $from = $cgi->param('from'); $namae = $cgi->param('namae'); $naiyou = $cgi->param('naiyou'); print "Content-type: text/html\n\n"; # 設定 $sendmail = '/usr/lib/sendmail'; $jcode = './jcode.pl'; $to = 'ha***@***.ne.jp'; #$from = ''; $subject ='名鉄と地下鉄の直通運転'; # 文字コードライブラリの読み込み require $jcode; # メール送信 &jcode'convert(*subject,'jis'); open(MAIL,"| $sendmail -t"); # ヘッダ情報出力 print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n"; # 本文出力 print MAIL " $namae\n\n"; print MAIL " $naiyou\n"; close(MAIL); #確認表示 print " $namae\n"; print " $naiyou\n"; print "メールを送信しました\n"; end #確認表示の所で表示が改行されない。
- strict refs in use
Perl cgiを作っているものです。 Can't use string ("from_auto") as a HASH ref while "strict refs" in use at common.cgi line 43. というエラーがでました。line 43にはstrict refsに関係のありそうな記述はありません。 common.cgiの中に、連想配列の参照渡しを追加したとたん、上記のエラーが出るようになりました。解決策をご指導ください。
- perl cgiで正規表現が無限にマッチする
perl でcgiを作っています。フォームから受け取ったテキストから、正規表現を用いて、データを切り出そうと思っています。 以下のようなコードを書くと、マッチするのは一か所だけのはずなのに、無限回数マッチしてprintしつづけます。なにが間違っているのでしょうか。ご指導ください。 my $text = $in_data{'data_text'}; #フォームから受け取る $text =~ tr/+/ /; $text =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("H2", $1)/eg; # invalidation $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; while ( $text =~ /Line(\d{1}):長さ:(\S+) km/){ print "Line$1: $2<br>"; }
- DreamHostでCGIを使う場合の設定について
米国のDreamHostのVPSにあげているCGIのページなのですが 最近になって表示がおかしくなりました。 ソースは簡単な下の10行ほどなのですが・・・ 【CGIのソース】 ——————————————————————————— #!/usr/bin/perl $rand = int(rand(1000)); print "Content-type: text/html¥n¥n"; print "<html>¥n"; print "<head><title>TEST</title></head>¥n"; print "<body><center>¥n"; print "<h1>$rand</h1><a href=¥"rand_test.cgi¥">TEST</a>¥n"; print "</center></body></html>¥n"; exit; ——————————————————————————— CGIは「TEST」を押すと自信をリンクする形です。 以前は再読み込みして「 int(rand(1000))」の吐き出すランダムな数が クリックするたびに表示されました。 が、現在は同じ数が繰り返されます。 他のホスティング会社のカゴヤで試した所、 以前のDreamHostと同じようにクリックする度にランダムな数を表示します。 (http://kaitoriken.com/001.gif のGIFアニメの感じです。) サポに理由を尋ねるのですが、「キャッシュの問題」の一点張りです。 これの原因とかお分かりの方、教えていただけないでしょう?
- ファイルに差異があるかの確認ができない
普段VBを使用しており、Perlはほぼ初心者 (十年前に教科書読んでちょっと作成した程度)です。 何千ものファイルを処理する必要があるため Perlを使用することになったのですが、 「File::Compare」のcompareを使用したファイルの比較が うまくいきません。Text::Diffを使用した比較はうまくいくため 何がいけないのかわからず困っております。 前提として、Perl Strawberryを使用しています。 use File::Compare; my $file1 = "test3.txt"; my $file2 = "test4.txt"; my $cmpr = 0; $cmpr = compare ("test3.txt", "test4.txt"); if ($cmpr == 0){ print "ファイルの内容が異なります"; } と、これだけなのですがうまく動作しません。 ファイルの中身が異なっていることは確認済みです。 また全く同じファイルを使用して print OUT diff "test3.txt", "test4.txt", {STYLE => "Context"}; とすると問題なく動作します。 できればファイルの中身が異なることを確認してから diffを実行したいためcompareも使おうとしています。 詳しい方には非常に簡単な問題なのだと思いますが、 お手上げ状態のためお力を貸していただけると幸いです。 よろしくお願いいたします。
- ベストアンサー
- Perl
- Haruma2265
- 回答数2
- perlでcsvファイルから複数行を抽出したい
プログラミング初心者です。 お知恵をお貸しください。 perlでcsvファイルから任意の複数行を、コマンドライン引数を使って抜き出したいです。 1行だけだとうまくいきますが、以下ではすべてのcsvデータが出力されてしまいます。 ----------------------getcsv.pl ここから---------------------- #!/usr/bin/perl -- use strict; use warnings; open(IN, "<adata.csv"); open (OUT, ">$bdata.csv"); while(<IN>){ if($. == $ARGV[0] || $ARGV[1] || $ARGV[2] || $ARGV[3]) { print OUT $_; } } close(IN); close (OUT); ----------------------getcsv.pl ここまで---------------------- ----------------------コマンド ここから---------------------- perl getcsv.pl 1 3 8 10 ----------------------コマンド ここまで---------------------- よろしくお願いします。
- ベストアンサー
- Perl
- OKINAWANOJ
- 回答数2