我无法理解哈希引用并更改哈希值,而不是返回它.我想编写一个子例程,它将从哈希返回一个值并修改哈希值.在编写代码时我遇到了一些问题.所以,我编写了以下基本代码来理解修改哈希的位置.
#!/usr/local/bin/perl
#Check hash and array references
#Author: Sidartha Karna
use warnings;
use strict;
use Data::Dumper;
sub checkHashRef{
my ($hashRef, $arrVal) = @_;
my %hashDeref = %{$hashRef};
$hashDeref{'check'} = 2;
push(@{$arrVal}, 3);
print "There:" ;
print Dumper $hashRef;
print Dumper %hashDeref;
print Dumper $arrVal
}
my %hashVal = ('check', 1);
my @arrVal = (1, 2);
checkHashRef(\%hashVal, \@arrVal);
print "here\n";
print Dumper %hashVal;
print Dumper @arrVal;
Run Code Online (Sandbox Code Playgroud)
观察到的输出是:
There:$VAR1 = {
'check' => 1
};
$VAR1 = 'check';
$VAR2 = 2;
$VAR1 …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用List :: MoreUtils方法.但是,在某些情况下需要清楚它的用法.
如果可以与地图一起使用,请告诉我.例如:
#!/usr/bin/perl
use strict;
use warnings;
use List::Util;
use List::MoreUtils;
use Data::Dumper;
my @udData1 = qw(WILL SMITH TOMMY LEE JONES);
my @arr = qw(WILL TOMMY);
my %output = map{$_=>List::MoreUtils::firstidx{/$_/} @udData1} @arr;
print Dumper %output;
print List::MoreUtils::firstidx{/TOMMY/} @udData1;
print "\n";
Run Code Online (Sandbox Code Playgroud)
输出:
$VAR1 = 'TOMMY';
$VAR2 = 0;
$VAR3 = 'WILL';
$VAR4 = 0;
2
Run Code Online (Sandbox Code Playgroud)
正如观察到的那样,我在使用map时没有正确获取值,但在后面的命令中使用它时可以正常使用.我打算用$ _作为@arr的元素.这可能是不正确的.那么,请建议我一个替代方案.我必须使用foreach吗?
我正在尝试将一组操作作为数组执行.为此,我必须传递子例程引用.(可能还有其他方法可以在不使用数组的情况下执行此操作.但是,由于某些其他限制,我觉得这是最好的.
我正在尝试做的基本示例代码:
#!/usr/bin/perl
use strict;
use warnings;
use Data::Dumper;
sub test()
{
print "Tested\n";
}
my $test;
my @temp = (1, 2, 3);
my $operations = [
[\&test, undef, undef],
[\&shift, \$test, \@temp],
];
foreach(@$operations){
my $func = shift $_;
my $out = shift $_;
$$out = $func->(@$_);
}
print Dumper $test;
Run Code Online (Sandbox Code Playgroud)
观察到的输出是:
Tested
Undefined subroutine &main::shift called at temp2.pl line 22.
Run Code Online (Sandbox Code Playgroud)
查询 - 是否可以将内置子例程作为引用传递?
已有早期查询,reg在这里作为子例程引用构建.
由于问题被问了大约3年,所以想知道现在是否有任何替代方案.如果有人解释为什么在这种情况下内置函数和用户定义的子例程之间存在区别,我将不胜感激?