#! /usr/bin/perl
use warnings;
use strict;
use Test::More tests => 6;
sub not_in_file_ok {
my ($filename, %regex)= @_;
open (my $fh, '<', $filename)
or die "couldn't open $filename for reading: $!";
my %violated;
while (my $line = <$fh>) {
while ( my ($desc, $regex) = each %regex ) {
if ( $line =~ $regex ) {
push @{$violated{$desc}||=[] }, $.;
}
}
}
if ( %violated ) {
fail("$filename contains boilerplate test");
diag "$_ appears on lines @{$violated{$_}}" for keys %violated;
}
else {
pass ("$filename contains no boilerplate test");
}
}
现在开始调用上面的函数
sub module_boilerplate_ok {
my ($module ) = @_;
not_in_file_ok ( $module =>
'the great new $MODULENAME' => qr/- The great new/,
'boilerplate description' => qr/Quick Summary of what themodule/,
'stub function definition' => qr/function[12]/,
);
}
我的问题是第一个参数应该是子程序not_in_file_ok
的“文件”。 $module =>
可以代表一个文件吗?我认为$module =>
似乎是哈希的关键,因为它使用的是=>
。谁能帮我理解参数?
答案 0 :(得分:2)
FlinkKafkaConsumer09
运算符称为 fat逗号,基本上是逗号。它具有额外的功能,如果它的左手参数是&#34;裸字&#34; (完全由ASCII字母和数字以及下划线组成)然后它将被隐式引用,例如=>
与field1 => 99
相同,但在这种情况下不适用,因为{{ 1}}不是一个赤字。它还暗示了它的左右参数之间的某种关系,这就是为什么它经常用于哈希初始化以分离哈希元素的键和值
您的代码与此相同
'field1', 99
在我看来应该这样写。 $module
在这里没有任何优势,似乎作者试图变得聪明
答案 1 :(得分:0)
=>
是胖逗号。它基本上是编写,
的另一种方式,但使用它会使得逗号分隔列表对读者来说更加明显。比较这些:
%a = (
a => 1,
b => 2,
c => 3,
);
%b = ("a", 1, "b", 2, "c", 3,);
胖逗号=>
的左侧被假定为文本。
我将您的子通话编写为
not_in_file_ok ( $module,
'the great new $MODULENAME' => qr /- The great new/,
'boilerplate description' => qr /Quick Summary of what themodule/,
'stub function definition' => qr /function[12]/,
);
在视觉上将$module
参数与剩余列表分开。
这是有效的,因为Perl哈希可以转换为列表(数组)并返回任何
@array1 = %hash1;
%hash2 = @array1;
散列的列表/数组表示只是键和值的列表:key1,value1,key2,value2等。这就是你作为参数传递给sub的内容。
sub的第一行接受一个参数(into $filename
)并从剩余的参数中创建一个散列:
my ($filename, %regex)= @_;
第二行尝试打开第一个参数:
open (my $fh, '<', $filename)
我认为它应该是一个文件名。无论它被称为$module
还是后面都是胖或稀/普通逗号。
有关详细信息,请参阅http://perldoc.perl.org/perlop.html#Comma-Operator。