Perl函数($$)表单有什么特殊之处?
我继承了表格的功能:Perl函数($$)表单有什么特殊之处?,perl,Perl,我继承了表格的功能: sub func($$) { } 我更习惯于看到: sub func { ## then extract params using shift for example } 我查了一下$,这是获取当前进程ID的一种方法。但从函数看,这里似乎没有使用进程ID。那么,$在这个上下文中是否意味着其他的东西呢 我感到困惑的函数如下所示。为什么使用($$) 使用文件句柄; #函数的结构与此非常相似-仅更改名称 子消息($$) { 我的$string=shift; 我的$fil
sub func($$) {
}
我更习惯于看到:
sub func {
## then extract params using shift for example
}
我查了一下$
,这是获取当前进程ID的一种方法。但从函数看,这里似乎没有使用进程ID。那么,$
在这个上下文中是否意味着其他的东西呢
我感到困惑的函数如下所示。为什么使用($$)
使用文件句柄;
#函数的结构与此非常相似-仅更改名称
子消息($$)
{
我的$string=shift;
我的$fileHandle=shift;
我的$Message=undf;
#parseAMessage和parseBMessage是从文件中提取特定类型消息的函数
if(($Message=parseAMessage($string,$fileHandle))
||($Message=parseBMessage($string,$fileHandle)))
{
}
返回$Message;
}
子语法分析器消息($$)
{
}
子语法分析器消息($$)
{
}
#函数似乎使用参数arg1:file中的字符串,arg2:file的filehandle
#大概这背后的想法是处理文件中的当前行,但也可以访问文件
#在需要时移动到下一行的手柄。所以我称之为这可能不是
#很棒的Perl-我是perler的初学者
$fh=文件句柄->新建;
如果($fh->open(close;
}
打印“完成”\n;
1.
它们是原型,定义函数作为参数的内容(不安全…)
它允许您定义内置函数之类的函数,以便您可以调用子剂量测量
调用打印
doSomething($scalar)
或doSomething$scalar
将产生相同的结果,如print($scalar)
与print$scalar
根据上面的评论:
print
可能不是一个很好的例子,因为它没有特殊的参数解析,除了不带参数的print
像print$\ucode>一样工作。(如果你真的想为自己的功能实现这一点,你可以用(@)
)的原型来实现它。像模拟推送这样的东西将是一个更有趣的例子(事实上,这就是你链接到的perlsub部分所使用的)。@IlmariKaronen你可能是对的,但这是第一个想到的,不想让map/grep/array函数过于复杂实际上print
有非常特殊的参数解析,因为print$fh@list
和print{$fh}@list
表单无法用原型模拟@托宾克:不过,那只是。
use FileHandle;
# The structure of function is pretty much like this - names changed only
sub parseMessage($$)
{
my $string = shift;
my $fileHandle = shift;
my $Message = undef;
# parseAMessage and parseBMessage are functions to extract specific types of messages from file
if ( ($Message = parseAMessage($string, $fileHandle))
|| ($Message = parseBMessage($string, $fileHandle)) )
{
}
return $Message;
}
sub parseAMessage($$)
{
}
sub parseBMessage($$)
{
}
# The function seems to use arguments arg1: string from file, arg2: filehandle of file
# presumably idea behind this is to process current line in file but also have access to file
# handle to move to next line where required. So the way I am calling this is probably not
# great Perl - I am a beginner perler
$fh = FileHandle->new;
if ($fh->open("< myfile.log")) {
# here we evaluate the file handle in a scalar context to get next line
while($line = <$fh>) {
parseMessage($line, $fh);
#print <$fh>;
}
$fh->close;
}
print "DONE\n";
1;