トップ 一覧 検索 ヘルプ ログイン

Perlの変更点

  • 追加された行はこのように表示されます。
  • 削除された行はこのように表示されます。
{{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(<STDIN>) {
     chomp;
     my($return) =  &url_decode($_);
     print "$return\n";
 }