Чтобы заставить Perl Critic замолчать, но совсем ничего хорошего, просто измените код на:
open(my $PIPE_FROM_FREESPCHK, "-|", $cmdline)
|| zdie($MSG_PASSTHRU, "Error checking free space of file system.");
Обратите внимание, что это абсолютно не лучше в любом отношении из гораздо более очевидного:
open(my $PIPE_FROM_FREESPCHK, "$cmdline |")
|| zdie($MSG_PASSTHRU, "Error checking free space of file system.");
Поскольку вы не отделяете свои токены для прямого вызова exec
. Это будет выглядеть примерно так:
open(my $PIPE_FROM_FREESPCHK, "-|", $cmd_name, @cmd_args)
|| zdie($MSG_PASSTHRU, "Error checking free space of file system.");
Вопрос в том, выполняете ли вы команду оболочки или просто что-то выполняете. Если ваш бесплатный чек похож на df . 2>/dev/null | awk ....
, то вам нужна полная оболочка. Если это просто df
, значит, нет.