Для выхода из строки, которая будет использоваться в качестве аргумента оболочки, мы используем функцию escapeshellarg()
в PHP
. Делает Perl
имеет эквивалентная функция?
String::ShellQuote
, но чаще всего в этом нет необходимости. Вы просто можете избежать вызова оболочки путем тщательного программирования. Например, system
принимает список аргументов вместо строки.
Лучшая практика:
use IPC::System::Simple qw(systemx);
systemx($command, @arguments);
require IPC::System::Simple;
use autodie qw(:all);
system([@allowed_exit_values], $command, @arguments);
Perl может соответствовать следующей заявленной функции:
добавляет одинарные кавычки вокруг строки и заключает в кавычки/зачеркивает все существующие одинарные кавычки
http://php.net/manual/en/function.escapeshellarg.php#function.escapeshellarg
вот так:
sub php_escapeshellarg {
my $str = @_ ? shift : $_;
$str =~ s/((?:^|[^\\])(?:\\\\)*)'/$1'\\''/g;
return "'$str'";
}