Я не могу рекомендовать Dmitry Streblechenko библиотека Redemption Data Objects достаточно высоко. Это - COM-компонент, который предоставляет нормальный API Расширенному MAPI и является радостью для использования. Стойки ворот API Exchange перемещаются от одного выпуска до следующего: “Use M: диск! Нет, используйте WebDAV! Нет, используйте ExOLEDB! †¦ нет, используйте веб-сервисы! ” с единственной константой, являющейся старым добрым MAPI.
Вы не можете получить аргументы в исполняемый файл perl до того, как они будут обработаны оболочкой. Однако вы можете убедиться, что оболочка не обрабатывает их снова :
system('bar', @ARGV);
vs.
system("bar @ARGV");
См. perldoc -f system :
Если есть только один скалярный аргумент, аргумент проверяется на наличие метасимволов оболочки, и если они есть, весь аргумент передается в систему командная оболочка для синтаксического анализа (это «/ bin / sh -c» на платформах Unix, но может отличаться на других платформах). Если нет метасимволов оболочки в аргумент, он разбивается на слова и передается непосредственно в «execvp», что более эффективно.
Если вам нужно прочитать вывод программы, используйте дескриптор процесса и передайте аргументы таким же образом (без интерполяции) :
open my $barhandle, '-|', 'bar', @ARGV or die "Can't call bar: $!";
while (my $line = <$barhandle>)
{
# do something with $line...
}
close $barhandle;
Есть много способов вызвать программу на Perl; см. В чем разница между обратными кавычками Perl, system и exec? для хорошего обзора основных параметров.
Это предельно просто. Ознакомьтесь с системным (LIST) вариантом системных вызовов.
system('bar', @ARGV);
perldoc -f system
В bash:
exec bar "$@"
Это сохраняет интервал в аргументах. Однако перенаправление ввода / вывода не является аргументом в значении этого термина (но перенаправление ввода / вывода, выполненное для исходного вызова, будет сохраняться для вызванной команды «bar», если вы его не измените).