トップ 差分 一覧 ソース 検索 ヘルプ ログイン

Perl

[プログラム]

備忘録

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が禁止しているので商用利用はできない。
個人サイトにくっつけるレベル
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秒