我有以下子程序,我应该将例程作为哈希表传递,并且应该使用perl在另一个子例程函数中再次调用哈希表?
输入文件(来自linux命令bdata):
NAME PEND RUN SUSP JLIM JLIMR RATE HAPPY
achandra 0 48 0 2000 50:2000 151217 100%
agutta 1 5 0 100 50:100 16561 83%
我的子程序:
sub g_usrs_data()
{
my($lines) = @_;
my $header_found = 0;
my @headers = ();
my $row_count = 0;
my %table_data = ();
my %row_data = ();
$lines=`bdata`;
#print $lines;
foreach (split("\n",$lines)) {
if (/NAME\s*PEND/) {
$header_found = 1;
@headers =split;
}
elsif (/^\s*$/)
{
$header_found=0;
}
$row_data{$row_count++} = $_;
#print $_;
}
我的查询:
如何将我的子程序作为哈希传递给另一个子程序?
例如: g_usrs_data() - >这是我的子程序。
上面的子程序函数应该传递给另一个子程序函数(即作为哈希表进入usrs_hash)
例如: CREATE_DB(usrs_hash,$ sql1m)
答案 0 :(得分:2)
子程序可以作为代码引用传递。请参阅perlref。
匿名子程序
的示例use warnings;
use strict;
my $rc = sub {
my @args = @_;
print "\tIn coderef. Got: |@_|\n";
return 7;
}; # note the semicolon!
sub use_rc {
my ($coderef, @other_args) = @_;
my $ret = $coderef->('arguments', 'to', 'pass');
return $ret;
}
my $res = use_rc($rc);
print "$res\n";
这个愚蠢的程序打印
In coderef. Got: |arguments to pass| 7
有关代码参考的说明
将匿名子例程分配给标量$rc
,使其成为代码参考
使用现有(已命名)子,例如func
,代码引用由my $rc = \&func;
这个$rc
是一个普通的标量变量,可以像其他任何一样传递给子程序
然后由$rc->();
调用子句,在括号中我们可以传递参数
请注意,创建和使用它们的语法与其他数据类型一样
由= sub { }
匿名分配,非常类似于= [ ]
(arrayref)和= { }
(hashref)
对于已命名的子使用&
而不是sigil,因此\&
代表\@
(数组)和\%
(哈希){ p>
它们由->()
使用,而不是->[]
(arrayref)和->{}
(hashref)
对于一般参考文献,请参阅perlreftut。子程序在perlsub中有详细介绍。
请参阅匿名潜艇上的this post示例,其中包含许多答案。
更多信息请参阅掌握Perl 的this article和 The Effective Perler 中的this article。