- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
{{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";
}