для программы, которую я пытаюсь написать в perl прямо сейчас, я хочу построить опцию, которая выводит вывод в выходной файл, что довольно легко с Perl-модулем Getopt. однако, если опция не используется, я хотел бы, чтобы выход перешел на терминал (STDOUT). для этого я написал небольшой скрипт, чтобы проверить, могу ли я построить коммутатор с модулем IO :: File.ищет простой переключатель между «write to STDOUT» и «write to outfile»
#!/usr/bin/env perl
use strict;
use warnings;
use Getopt::Long;
use IO::File;
my $outfilename;
GetOptions (
"out=s" => \$outfilename,
);
my $out = IO::File->new(">$outfilename");
if (defined $out) {
print $out "Hello World!\n";
}
else {
print "Hello World!\n";
}
close $out if $outfilename;
хотя программа «прогонов» с или без опции -o, когда я запустить его без -o, Perl говорит мне, что $ outfilename в строке 13 не инициализирована, который я предполагаю, потому что Getopt возвращает переменные как «false», когда опция не используется. однако, я не могу придумать способ обойти это. Можете ли вы, ребята, помочь мне?
также, я абсолютно уверен, что есть гораздо более простой способ построить такой коммутатор, о котором я не знаю. я просто писал это, потому что я не мог найти лучшего способа в Интернете, поэтому, если у вас есть какие-то советы о том, как сделать это умнее, я был бы очень благодарен!
Я не знаю, знаете ли вы это, потому что я видел, что вы пытаетесь принять более одного ответа, но вы можете выбрать только один ответ на свой вопрос. – TLP
да: D я просто понял, что, и мне это не нравится, потому что я думаю, что все ансеры очень полезны здесь. – Prawn
Да, ответы в теге Perl, как правило, имеют высокое качество, и, как вы можете видеть, он также активно рассматривается, как можно заметить в нашей дискуссии в комментариях. Я бы сказал, что «лучшее» решение, вероятно, является первым икегами. Не из-за причин, о которых он заявляет, а потому, что он более прозрачен: 'print $ outfh" stuff "' явно говорит кому-то, кто читает код, что происходит, тогда как 'print 'stuff'' может ввести в заблуждение. – TLP