gpt4 book ai didi

perl - 为什么我应该在 Perl 中使用 或 <> 而不是

转载 作者:行者123 更新时间:2023-12-04 17:13:18 26 4
gpt4 key购买 nike

引自 Perl::Critic::Policy::InputOutput::ProhibitExplicitStdin

Perl has a useful magic filehandle called *ARGV that checks the command line and if there are any arguments, opens and reads those as files. If there are no arguments, *ARGV behaves like *STDIN instead. This behavior is almost always what you want if you want to create a program that reads from STDIN. This is often written in one of the following two equivalent forms:

while (<ARGV>) {
# ... do something with each input line ...
}
# or, equivalently:
while (<>) {
# ... do something with each input line ...
}

  • 它是“只是惯例”还是有一些充分的理由不使用 <STDIN> ?

  • 我觉得 <STDIN>使我的代码意图比使用 <> 更清晰或 <ARGV> .

    我的代码流程是这样的
    my @inp = <STDIN>;
    my $len = $inp[0];

    ...

    for(my $i = 0; $i < ($len + 0); $i++) {
    my @temp = split (' ', $inp[$i]);
    ...
    }

    最佳答案

    您使用可以做您想做的事情的那个。见 perlvar有关 ARGV 的解释文件句柄。 ARGV还从您在命令行上指定的文件名中读取。也许你想要那个功能,也许你不想要。

    而且,您不必按照 Perl::Critic 所说的去做。其中许多政策是一小部分人的意见。如果您只想显式地从 STDIN 读取,这就是您需要做的。编写 Critic 政策的人不是为了说明您需要做什么。如果没有应用的上下文,提出任何这样的问题几乎毫无意义。一般规则只是一般性的,在谈到具体情况时会分解。

    我不确定为什么您认为使用 STDIN 的意图更清晰,因为您没有告诉我们您的意图。代码几乎从不为自己说话,因为我们倾向于编写解决方案而不是陈述问题。解决方案可能不是正确的。

    在你的情况下,我认为这段代码更清晰,因为它是用 Perl 编写的,而不是你使用的 C 方言:)

     chomp( my $length = <STDIN> );

    my $count = 0;
    while ( <STDIN> ) {
    last if $count++ > $lines_to_read;

    my @temp = split ' ';
    ...;
    }

    关于perl - 为什么我应该在 Perl 中使用 <ARGV> 或 <> 而不是 <STDIN> ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3745623/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com