【问题标题】:What exactly is happening in this piece of perl code?这段 perl 代码到底发生了什么?
【发布时间】:2019-08-12 14:54:36
【问题描述】:

所以我的问题更多是关于第二行,除非我对第一行有误。所以我猜首先发生的是 $filename 引用的文件的内容在变量 $in 中,但在第二行中,内容进入数组@data,这是某种拆分吗?我不太了解 Perl,只了解基础知识,因为我们必须阅读并在工作中进行非常小的更改。

open(my $in,  "<", $filename);
my @data = <$in>;

【问题讨论】:

标签: perl


【解决方案1】:

open(my $in, "&lt;", $filename);

这个open是一个名为$filename的文件,用于读取&lt;并将其与文件句柄$in相关联。

my @data = &lt;$in&gt;;

&lt;$in&gt; 语法是 readline 函数的快捷方式,它在列表上下文中读取直到到达文件结尾并返回行列表。

$/IO::Handle-&gt;input_record_separator 的值暗示了拆分行为,这是输入记录分隔符。默认情况下它是\n,因此是逐行行为。

【讨论】:

  • 谢谢,很好的解释,所以这个 是拆分语法,而 $/ 就像一个默认的 perl 变量,不知道该怎么说,默认情况下是 \n 并充当? 的正则表达式
  • 正如@Quentin 所建议的,perldoc.perl.org/functions/open.html 有望解释语法的含义。我不知道它是否在后台使用正则表达式,但该变量确实是默认值,更改它意味着您可以使用 来遍历文件中的多行记录。
  • 谢谢,一定要研究一下,真正学习 Perl,因为我们只是偶尔使用它,没有太多时间这样做。
  • @albuck97 &lt;&gt; 在这种情况下是 readline 运算符;它从给定的文件句柄中读取行,其中行的结尾由$/ 确定(这是一个字符串,而不是正则表达式)。因为它用于列表赋值,它会读取所有可用的行并返回它们,然后将它们分配到数组中。请注意,这些行仍然有它们的\n(或任何$/)。
  • 感谢@ysth,我认为 可能是 readline 运算符,但不能在工作中进行猜测,而且有很多事情要做,而且很少使用 Perl,没有太多是时候彻底阅读文档了。感谢所有帮助,非常感谢。
【解决方案2】:

名称为$filename 的文件已打开。 文件内容将逐行加载到数组@data中。

【讨论】:

    【解决方案3】:
    open(my $in, "<", $filename);
    my @data = <$in>;
    

    如果您看到这些行的相应伪代码可能会对您有所帮助,即:

    input_file_handle = get_input_file_handle( filename )
    data_array = get_lines_of_text_from_file_handle( file_handle )
    # Now data_array is an array of lines contained in the file.
    

    在伪代码中,input_file_handle 等价于 Perl 的 $indata_array 对应于 Perl 的 @data

    多纳特写道:

    我不太了解 Perl,只了解基础知识,因为我们必须阅读并在工作中进行非常小的更改。

    啊。我注意到,Perl 的许多非明星声誉来自于它的许多用户在没有首先正式学习 Perl 的情况下尝试使用它。他们认为 Perl 就像 C 一样,然后当他们看到在 C 中从未见过的代码时会感到沮丧。而不是坐下来阅读一本好的 Perl 入门书来学习 Perl 的基础知识,他们通常更喜欢 bash Perl。

    现在我不是说你是那种人,但我以前见过这种情况。 (比如我工作中的某个人曾经表达了对 Perl 的极度仇恨,因为他无法弄清楚 Perl 代码的一些基本行。当我向他解释这些行时,他平静下来并说这对他来说更有意义,现在它已经被解释过了。想想看——他在没有学会如何使用 Perl 的情况下抨击它。)

    当我第一次尝试使用 Perl 时,我认为这很容易,但我很难理解它,尽管我有多年的编码经验。但我没有抨击 Perl,而是决定从一本 Perl 初学者的书中学习 Perl,并很快爱上了 Perl。

    所以我建议你也这样做,然后开始学习 Perl。找到合适的书并不难。事实上,我强烈推荐由 Randal L. Schwartz、Brian D. Foy 和 Tom Phoenix 撰写的 O'Reilly 的书“Learning Perl”。它不仅可以很好地教您 Perl,而且还涵盖了许多有用的 Perl 习惯用法和单行语句,并提供了正则表达式的极好介绍。

    当程序员开始学习一门新语言,如 C、C++、Java、Python 或 Ruby 时,他们通常会从正式学习开始,无论是通过学校的课程、在线教程、在线课程、他们买的书,或者他们从图书馆借出的书。 (这很有意义。)但是对于 Perl(比我遇到的任何其他语言都更重要),程序员倾向于放弃正式学习它,而是直接跳进去,然后当他们无法理解它时变得沮丧。这不公平地导致 Perl 声誉不佳。

    (我并不是说 Perl 没有问题;我只是说人们应该在批评他们不理解的代码之前学习 Perl。)

    因此,如果您曾经花时间正式学习一门编程语言,请为 Perl 做同样的事情。我上面提到的“Learning Perl”一书是一个很好的起点。

    【讨论】:

      猜你喜欢
      • 2012-08-29
      • 2013-09-13
      • 2016-06-09
      • 1970-01-01
      • 2018-07-28
      • 1970-01-01
      • 2014-11-12
      • 2012-07-26
      相关资源
      最近更新 更多