【问题标题】:Perl: read from <>Perl:从 <> 读取
【发布时间】:2011-12-07 06:30:12
【问题描述】:

在 Perl 中读取 &lt;&gt; 的作用是什么?例如,下面会做什么?

print for(<>);

【问题讨论】:

    标签: perl readfile diamond-operator


    【解决方案1】:

    所谓的菱形运算符 (&lt;&gt;) 从 STDIN 或指定为命令行参数的文件名逐行(在标量上下文中)读取。

    来自perldoc perlop

    空文件句柄&lt;&gt; 很特别:它可以用来模拟 sed 和 awk 的行为。 &lt;&gt; 的输入来自标准 输入,或从命令行上列出的每个文件。这是怎么回事 工作:第一次评估&lt;&gt;,检查@ARGV数组, 如果为空,$ARGV[0] 设置为"-",打开时 为您提供标准输入。然后将@ARGV 数组作为 文件名列表。


    在列表上下文中,&lt;&gt; 返回所有行,每行存储为列表中的一个元素。

    这意味着print for &lt;&gt;; 将执行与print while &lt;&gt;; 相同的操作,尽管内存更大。

    【讨论】:

      【解决方案2】:

      您已经找到了 Perl 中最神奇的部分。好吧,我敢肯定还有更多神奇的东西,但是这个小习惯使非常很容易编写用于shell管道的程序文件-操作使用。

      当不带任何参数运行时,&lt;&gt; 将从标准输入中一次读取一行。

      当使用参数运行时,它会将参数视为文件名,并依次从命名文件中读取一行。

      一个简短的演示:

      $ cat > print.pl
      #!/usr/bin/perl -w
      print for(<>);
      $ chmod 755 print.pl 
      $ echo hello world | ./print.pl 
      hello world
      $ ./print.pl print.pl 
      #!/usr/bin/perl -w
      print for(<>);
      $ ./print.pl print.pl print.pl
      #!/usr/bin/perl -w
      print for(<>);
      #!/usr/bin/perl -w
      print for(<>);
      $ 
      

      我在那里手动输入了程序;完全输入后点击^D

      【讨论】:

        【解决方案3】:

        它从标准输入读取,一次一行,并将其存储到$_。 print 然后默认打印出$_,因为它没有给出参数。该程序从标准输入读取并回显到标准输出,直到到达 EOF。

        【讨论】:

        • 我做到了。由于某种原因,堆栈溢出吞噬了下划线。
        猜你喜欢
        • 2012-10-18
        • 2012-12-11
        • 1970-01-01
        • 2016-09-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多