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";
}