LoginSignup
7
7

More than 5 years have passed since last update.

system()の注意点

Posted at

Perlのsystem()の引数についてのメモ。2005年5月14日に書き留めておいたもの。

Perlのsystem()は

  • リストだと、そのまま execvp() に渡される
  • スカラーだと、/bin/sh -c に渡される

こんな仕様になっている。でも、意外と知られていないらしい。system() に安易にスカラーを渡すとメタキャラクターが変に展開されてしまい、セキュリティホールになるので注意(…つまり私も昔やってしまったことがある)。

環境変数は@ENVを使えば取れる。ファイル名のワイルドカードを展開したい場合はFile::Globがあればたいていは事足りるはず。この手のことをするためにsystem()を使わないこと。

以下は例。

リスト

list.pl
system("ls","/etc/*");
h12o@exegesis:~$ perl list.pl 
ls: /etc/*: No such file or directory
h12o@exegesis:~$ 

スカラー

scalar.pl
system("ls /etc/*");
h12o@exegesis:~$ perl scalar.pl 
/etc/AFP.conf
…

h12o@exegesis:~$ 
7
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
7