fmemo
Perl
最終更新:
fmemo
-
view
改行コードを変換するワンライナー
Mac OS 9以前の改行コードである\rをUnix(Mac OS X)の改行コードである\nに変換したい場合。
$ perl -pe 's/\r/\n/g' inputfile > outputfile
Perlにおける真偽値
Perlにおける真偽値の定義は以下のとおり
- undef(未定義値)は偽
- 数値の0, 文字列の0,空の文字列""は偽
- 上記の3つ以外は真
use strict; use warnings; my $var1 = undef; my $var2 = 0; my $var3 = "0"; my $var4 = ""; my $var5 = 1; my $var6 = "aa"; if( $var1 ){ print "true\n"; }else{ print "false\n"; } if( $var2 ){ print "true\n"; }else{ print "false\n"; } if( $var3 ){ print "true\n"; }else{ print "false\n"; } if( $var4 ){ print "true\n"; }else{ print "false\n"; } if( $var5 ){ print "true\n"; }else{ print "false\n"; } if( $var6 ){ print "true\n"; }else{ print "false\n"; }
このプログラムを実行させると、
$ perl truefalse.pl false false false false true true
正規表現
- ^ 行頭
- $ 行末
- \w アルファベット(大文字小文字)、数字、アンダーバー。つまり[a-zA-Z_]と同値
- \d 数字。[0-9]と同値
- \s 空白文字(スペース、タブ、改行)
- . 改行以外の任意の文字
量指定子
- + 1回以上の繰り返し
- * 0回以上の繰り返し
- ? 0回または1回の繰り返し
コマンドラインオプション
-eオプション
その後にある文字列をプログラムだとして認識し、実行する。ワンライナーを書くときに使う。
$ perl -e 'print "hello\n"' hello
-n オプション
プログラムの前後にwhile(<>){ ... }があると解釈する。-eと組み合わせてワンライナーで使うことが多い。
-p オプション
nオプションに似ているが、最後に評価した式を出力する。-eと組み合わせてワンライナーで使うことが多い。
-l オプション
改行を付加する。
perldocの使い方
perldocについて知りたい時
$ peldoc perldoc
関数を調べたい時
$ perldoc -f sort
ソースをそのまま読みたい時
$ perldoc -u sort
モジュールのパスを知りたい時
$ perldoc -l sort
バイナリファイルの読み書き
use strict; use warnings; my @names = ('Alice', 'Bob','Charlie'); my @nums = (10, 20, 30); open my $fh, '>', 'binary-test' or die "file open error: $!"; binmode $fh; for (my $i=0; $i<3; $i++){ my $buffer = pack "a8 l", $names[$i], $nums[$i]; print $fh $buffer; } close $fh;
pack関数の書式は perldoc -f packで確認できる。
参考サイト
エンディアン変換
use strict; use warnings; if(@ARGV != 3){ print "You need 3 arguments.\n"; print "\$ perl endian.pl inputfile outputfile num\n"; exit; } my ($ifile, $ofile, $num) = @ARGV; open my $in,'<', "$ifile"; open my $out,'>',"$ofile"; if($num==2){ while(read($in,my $buf,2)){ print $out pack("n",unpack("v",$buf)); } }elsif($num==4){ while(read($in,my $buf,4)){ print $out pack("N",unpack("V",$buf)); } }else{ print "the 3rd argument should be 2 or 4.\n"; }