{{category プログラム}} !!!備忘録 !if文で中身が1行の時に、ブレースの省略できない。 if( $i == 5 ) print "5"; if( $i == 5 ) { print "5";} !ループ制御命令 continue -> next break -> last !ファイルオープン open(IN,"ファイル名") or die "シボー"; !!!Perlの個人的メモ !いまさらなmyとlocal Perl5からの人間だったのでlocalは曖昧なまま来ていたが、 静的スコープ(レキシカルスコープ)と動的スコープの違いという事がわかる。 動的スコープは、関数内で関数を呼び出す時に、あたかも、呼び出し位置に関数をコピペしたような扱いになり、local宣言された変数が使われる。 ちょっと気持ち悪い動き。 参考 http://www.futomi.com/lecture/local/local.html !!Perl5.8のutf8フラグ プログラムは動くけど、 Wide character in print at custom.crawler line 28. が表示される。 よくわからないけど、Encode:encodeしてあげればOKってこと? http://www.rwds.net/kuroita/program/Perl_unicode.html#encode コード上にソースの文字コード use encoding 'UTF-8'; を書いておけば、でなくなった。 !!CGIでのundefの0 CGIのqueryでデータが送られてきているかは、 if( $query->param("id") != undef ) { で判断できるが、数字を送る場合 if( $query->param("id") ne undef ) { 文字列判断させないと0と空文字はどちらもundefと判断されてしまう。 !!!Premature end of script headers perl -cでチェックしてもこれで動かないとき、改行コードの誤認識が原因らしい。 #!/usr/bin/perl -- とすると確かに治った。 http://sagittarius.dip.jp/toshi/premature.php !!!グローバル変数定義 use strict時にグローバル変数定義をするには varsモジュールを使う必要がある。 use vars qw($var1); のようにすると$var1はグローバル変数として定義される。 !!!例外処理 dieなどをキャッチするには該当する処理を eval{}; のブレースの中に書く そしてエラーが発生した場合の処理として$@を調べる $@が!=0の場合はエラーが発生しなにかセットされている if( $@ ){ # ここでエラーの処理 print $@; } !!!CPANモジュールのセットアップに参考となるサイト http://x68000.q-e-d.net/~68user/net/ext-module.html !!!ネットワークアドレス計算モジュール http://www2u.biglobe.ne.jp/~MAS/perl/waza/broadcastaddr.html 処理速度がクソ遅い。 !!!リファラーについて、 Perlになじんでいた自分としては、アールイーエフイーアールイーアールとスペルで記憶していたが、JavaScriptのdocument.referrerを使おうとしたときに綴りの違いに気づく。 調べてみると、refererは本当は間違いでreferrerらしい。 しかしRFC2616で定義してしまったため、そのままになっているらしい。 http://www.ietf.org/rfc/rfc2616.txt !!!Perlの変数と、配列の記号 ScalarのSから$ Arrayのaから@という話。 本当かどうかは分からない。 !!!DBI http://homepage3.nifty.com/hippo2000/perltips/dbimemo.htm !!CGI http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2FCGI%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB !!!sample !web上のXML読んで解析するお天気cgi つくってみたもののデータ提供元のlivedoorが禁止しているので商用利用はできない。 個人サイトにくっつけるレベル {{ref otenki.cgi}} !URLエンコード文字を修正して表示 wikiのデータフォルダ見るのに便利 #!/usr/bin/perl # 標準入力から読んだURLエンコーディングの文字を普通の文字にして出力する sub url_decode($) { my $str = shift; $str =~ tr/+/ /; $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack('H2', $1)/eg; return $str; } while() { chomp; my($return) = &url_decode($_); print "$return\n"; }