Как выполнить функцию Perl qx с переменной - PullRequest
5 голосов
/ 17 июня 2011

Как заставить функцию Perl qx выполнить с моей переменной $opt?

До (работы):

my @df_output = qx (df -k /tmp);

Я хочу использовать -k, -g или -H:

my @df_output = qx (df -$opt /tmp);

Ответы [ 2 ]

8 голосов
/ 17 июня 2011

То, что у вас должно работать, , но : никогда не используйте qx. Это древний и опасный; что бы вы ни передавали, оно проходит через оболочку, поэтому очень легко оказаться уязвимым для инъекций оболочки или столкнуться с неожиданностями, если /bin/sh не совсем то, что вы ожидали.

Используйте форму с несколькими аргументами open(), которая полностью обходит оболочку.

open my $fh, '-|', 'df', "-$opt", '/tmp' or die "Can't open pipe: $!";
my @lines = <$fh>;  # or read in a loop, which is more likely what you want
close $fh or die "Can't close pipe: $!";
3 голосов
/ 29 августа 2014

попробуйте использовать обратную косую черту \$opt, все работает.

...