STDOUT здесь не в игре. Ты что-то забыл сказать нам? Что произошло, когда вы печатали на файловый дескриптор MAIL
? Получился ли этот вывод в сообщении? Что происходит, когда вы отправляете несколько строк в файловый дескриптор MAIL
?
Ваш код:
"|/bin/mail -s FreePorts zog\@geeemail.com" || die "mail failed: $!\n";
Это ничего не делает. Это строка, которая также является истинным значением. Чередование никогда не влияет на ветвь штампа. Что произошло, когда вы использовали первый бит кода в своем вопросе? Напишите небольшой пример сценария, чтобы увидеть, можете ли вы отправлять почту и проверять его, пока не разберетесь. Например, это полный скрипт, который проверяет вашу проблему:
#!perl
use strict;
use warnings;
open my $mail, '| /bin/mail -s FreePorts me@geemail.com';
print $mail "This is a test message from $$ at " . localtime() . "\n";
close $mail or die "The pipe failed!\n $?";
Что происходит, когда вы запускаете это? Что происходит при попытке выполнить ту же команду из командной строки?
Почему бы не использовать модуль Perl (например, один из модулей Email :: *) вместо использования внешней команды? Есть много информации о межпроцессном взаимодействии, и я думаю, что вы зашли в тупик. Модуль позаботится обо всех деталях за вас, имеет более приятный интерфейс и более гибкий.