Как уже упоминалось, обратные тиканы интерполируются, поэтому их срабатывание происходит на $
. Вы можете избежать их всех, или вы можете использовать одинарные кавычки, например:
open my $pipe, "-|", q[whois google.com | egrep ... |head -n1];
my $result = join "", <$pipe>;
close $pipe;
Это использует способность open
открыть трубу. -|
указывает, что файловый дескриптор $pipe
должен быть присоединен к выводу команды. Основным преимуществом здесь является то, что вы можете выбрать тип цитирования, q[]
эквивалентен одинарным кавычкам и не интерполирован, поэтому вам не нужно избегать вещей.
Но, боже, вставлять сценарий awk в Perl довольно глупо и хрупко. Либо используйте такой модуль, как Net :: Whois, либо выполните очистку whois в Perl, возможно, воспользовавшись такими вещами, как Email :: Find, или просто напишите его как скрипт bash. Ваш Perl-скрипт мало что делает в Perl в том виде, в каком он есть.