В скрипте Perl с несколькими каналами используется вызов system()
с использованием одного скалярного аргумента.Вызов выглядит примерно так:
system("zcat /foo.gz | grep '^.{6}X|Y|Z' | awk '{print $2,$3,$4,$6}' | bzip2 > /foo.processed.bz2");
Файл, о котором идет речь (foo.gz
), довольно большой, сжатый размер около 2 ГБ.Я думаю, именно поэтому изначально это было сделано с помощью системного вызова.
Вопросы:
Проблема в том, что этот системный вызов всегда, кажется, возвращает 0из системных команд сбой или нет.Я предполагаю, что это потому, что он вызывается через sh -c '...'
.Это правильно?
Есть ли способ проверить, был ли вызов system()
успешным, если передан только один скалярный аргумент?
Есть ли лучший способ обработки большого файла, такой какэто в равной степени или более эффективно (главным образом, в отношении скорости)?
Спасибо за любые подсказки, так как я не очень знаком с Perl.