Perl 除非代码I';我在读书
关于我正在阅读的代码,我需要两方面的帮助。首先,我一直在while循环中看到以下内容以读取文件:Perl 除非代码I';我在读书,perl,Perl,关于我正在阅读的代码,我需要两方面的帮助。首先,我一直在while循环中看到以下内容以读取文件: wile(<filename>){ next unless (/\w/); chomp; s/^\s*//; s/^\s*$//; my($name, $datatype, $io, $dummy) = split /\s*,\s*/, $_, 4; } wile(){ 下一个,除非(/\w/); 咀嚼; s/^\s*/; s/^\s*$/; 我的($name,$dataty
wile(<filename>){
next unless (/\w/);
chomp;
s/^\s*//;
s/^\s*$//;
my($name, $datatype, $io, $dummy) = split /\s*,\s*/, $_, 4;
}
wile(){
下一个,除非(/\w/);
咀嚼;
s/^\s*/;
s/^\s*$/;
我的($name,$datatype,$io,$dummy)=拆分/\s*,\s*/,$\u4;
}
所以,我想知道这是在做什么?因为正在读取的同一行中有逗号,所以逗号不会使它进入下一次迭代吗?那么,如果要在读取逗号时进行另一次迭代,它将如何分割行呢
另一个我被踩到的是:
while (<AP>) {
chomp;
s/
//g;
}
while(){
咀嚼;
/
//g;
}
我不知道那个代码到底在替代什么
谢谢 第一个片段:
filename
的文件句柄中读取一行。对于文件句柄来说,这是一个非常糟糕的名称\w
(单词字符),它将跳过处理。除非(/\w/),否则下一个是
如果不是(/\w/)
,则代码>与下一个相同。注意,除非/\w/,否则不需要括号--next代码>很好。
单词字符是,来自
\w
匹配单词字符(字母数字或
),不仅匹配[0-9a-zA-Z]
,还匹配来自非罗马脚本的数字和字符
chomp
的换行符。然后删除前导空格(如果有)4
。这意味着它返回前三个逗号分隔的字段,然后在列表的最后一个元素中返回所有其他字段作为一个字符串评论 使用词法文件句柄比使用裸名称要好得多。所以你要打开一个文件作为
open my $fh, '<', $filename or die "Can't open $filename: $!";
使用\w
也会跳过包含某些字符的行(与\w
匹配的字符除外),这意味着最好确保可以跳过这些字符
这里可能意味着跳过带有逗号但没有\w
(逗号与\w
不匹配)的行,该行将在列表中返回空格(或空字符串)。我觉得这有点隐蔽和脆弱。我只会删除带有空格的行,并在处理过程中处理可能出现的松散逗号。就目前情况而言,它对、a、
没有帮助,不管怎样,产生(“”、'a')
。因此,在任何情况下都可能需要进行检查
请注意,这段代码总共留下了尾随空格。当使用可选的第四个参数调用
split
时,它会保留所有空格,否则它们不会被删除。对于第一个代码段,我有一个问题是关于下一部分,除非。。。你的回答对我帮助很大。我以为只要读到一个非字母数字字符,它就会读到下一行。第二个,我也同意这是一个糟糕的代码,文件中有空格和新行,但是chomp会处理新行,我看到他们在其他地方用s/\s*//g替换空格,这就是为什么这会让我感到沉重。除非(条件)
=如果(!条件)
@raina77ow,那么这两行就是这么做的?因为他们在这个脚本的其他地方都使用s/\s*$/
。@sikquiver我更新了答案。如果有更多内容需要添加/编辑,请告知我。我不知道你到底在想什么,谢谢你澄清。然而,代码的其余部分也需要注释。@sikquiver同意——第二个代码片段不应该在那里。我也不知道这意味着什么。至于剥离空间,这是一种常见的方法,通常比将它们合并在一行中要快一些(您也可以看到)。
next unless /\S/; # or
next if /^\s*$/;