Perl не является оболочкой.Здесь вы вызываете некоторую подпрограмму Perl с «голым словом» echo
и передаете значение $message
двоичное или-ed с выводом некоторого подпрограммы с именем mail
, которому передается размер файла с именемв $subject
(-s
оператор) - и мы можем получить это далеко только после полного игнорирования того, что он даже не скомпилируется, потому что между $email
и выражением перед ним нет оператора.
В Perl вам нужны кавычки для ваших системных команд.Но поскольку в $message
может быть любое количество символов, из-за которых трудно передать «как есть» в оболочку, лучше всего открыть канал и вывести на него:
use English qw<$OS_ERROR>;
open( my $mailh, '|-', "mail -s '$subject' $email" )
or die( "Could not open pipe! $OS_ERROR" )
;
print $mailh $message;
close $mailh;