system関数やパイプを使って外部プログラムを実行する時は
汚染チェックを必ずする。
エスケープするべき文字
& ; ` ' \ " | * ? ~ < > ^ ( ) [ ] { } $ \n \r
以下の置き換えで全てをエスケープすると良い。
s/([\&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\n\r])/\\$1/g;
system関数やパイプを使って外部プログラムを実行する時は
汚染チェックを必ずする。
エスケープするべき文字
& ; ` ' \ " | * ? ~ < > ^ ( ) [ ] { } $ \n \r
以下の置き換えで全てをエスケープすると良い。
s/([\&\;\`\'\\\"\|\*\?\~\<\>\^\(\)\[\]\{\}\$\n\r])/\\$1/g;
例えば
sub xxx{
eval{
my $a=1;
if($a){return(0);}
};
}if(&xxx){print”abc”;}
else{print”def”;}
などとするとうまくいかない。
sub xxx{
eval{
my $a=1;
if($a){die;}
};
if($@){return(0);}
}
などとしよう。
配列をprintする時の区切り文字を変えるには $” に代入するだけ。
@list= (1,2,3,4);
$” = ‘,’;
print “@list”;
実行結果
1,2,3,4
ただし、
print @list;
“” (だぶるクォート)無しだと反映されない。