这段Perl代码中到底发生了什么?

时间:2019-08-12 14:54:36

标签: perl

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

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

3 个答案:

答案 0 :(得分:5)

open(my $in, "<", $filename);

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

my @data = <$in>;

<$in>语法是readline函数的快捷方式,该函数在列表上下文中读取直到到达文件末尾并返回行列表。

拆分行为由$/IO::Handle->input_record_separator的值表示,这是输入记录分隔符。默认情况下为\n,因此一行一行。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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的$in,而data_array对应于Perl的@data

多纳特写道:

  

我不太了解Perl,只是基本知识,因为我们必须在工作中阅读并做一些很小的更改。

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

现在,我并不是说您就是那种人,但我以前见过。 (例如,在我工作的某个人曾经对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进行同样的操作。我上面提到的“学习Perl”书是一个很好的起点。