[プログラム]
備忘録
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
sample
web上のXML読んで解析するお天気cgi
つくってみたもののデータ提供元のlivedoorが禁止しているので商用利用はできない。
個人サイトにくっつけるレベル
otenki.cgi(90)
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"; }
最終更新時間:2015年05月22日 13時58分41秒