Я пытаюсь проверить, если выходная строка backtick (это строка, справа?) Содержит подстроку.Функция индекса Perl не работает?
my $failedCoutner = 0;
my $tarOutput = `tar -tvzf $tgzFile`;
print "$tarOutput\n";
my $subStr = "Cannot open: No such file or directory";
if (index($tarOutput, $subStr) != -1)
{
push(@failedFiles, $tgzFile);
$failedCounter++;
print "Number of Failed Files: $failedCounter\n\n\n";
}
print "Number of Failed Files: $failedCounter\n\n\n";
Но это не работает. Он никогда не входит в оператор if.
Выход кавычки:
tar (child): /backup/Arcsight/EDSSIM004: Cannot open: No such file or directory
tar (child): Error is not recoverable: exiting now
tar: Child returned status 2
tar: Error is not recoverable: exiting now
Number of Failed Files: 0
Очевидно, что подстроки находятся в первой строке. Почему он не узнает это?
Вы уверены, что вывод действительно находится в '$ tarOutput'? Думаю, это на самом деле собирается stderr. Попробуйте добавить что-то вроде «print» tar output [$ tarOutput] \ n ", чтобы увидеть, что на самом деле там. – friedo
Всегда полезно печатать такие значения, как '$ tarOutput', чтобы убедиться, что они такие, какие вы думаете. –
И если вам нужно читать как из stdout, так и из stderr, попробуйте [IPC :: Open3] (https://metacpan.org/module/IPC::Open3). – friedo