我仍然不清楚由参部分原因是显示为不定值%Q和$_初始化.我一直在寻找perlreftut,仍然无法看到我做错了什么.将散列作为平面数组传递没有问题.
通过ref执行它testRef(\%mkPara)会传递对子例程的标量哈希引用,对吧?那么,是my %Q = %{$_}不是把它变回哈希?
use strict;
use diagnostics;
use warnings;
my %mkPara = ('aa'=>2,'bb'=>3,'cc'=>4,'dd'=>5);
sub testFlat
{
my %P = @_;
print "$P{'aa'}, $P{'bb'}, ", $P{'cc'}*$P{'dd'}, "\n";
}
sub testRef
{
my %Q = %{$_}; #can't use an undefined value as HASH reference
#print $_->{'aa'}, "\n";#Use of uninitialized value
print $Q{'aa'},"\n";
}
#testFlat(%mkPara);
testRef(\%mkPara);
Run Code Online (Sandbox Code Playgroud) 下面是一个小子程序,通过传递两个散列(每个散列包含 x 和 y 坐标)来计算两点之间的距离。我在调用子函数的行上收到“语法错误接近]{”致命错误。昨天刚开始使用 Perl,不太确定我在做什么。如何将两个哈希值传递给子函数以返回值?尝试过但没有取得多大成功,并且不确定我需要做什么(希望可以参考外部链接)。
%dot1 = ('x'=>5, 'y'=>6);
%dot2 = ('x'=>7, 'y'=>8);
sub dist {
my (%hash1) = @_[0];
my (%hash2) = @_[1];
$dist = ((@_[0]{'x'}-@_[1]{'x'})**2 + (@_[0]{'y'}-@_[1]{'y'})**2)**0.5;
}
$D = dist(\%dot1,\%dot2);
Run Code Online (Sandbox Code Playgroud) 以下代码的输出始终为空.不确定我做错了什么,并希望得到任何帮助.如何获取散列数组中特定散列中键的值?
use strict;
use warnings;
my %dot1 = ('a'=>1,'b'=>2);
my %dot2 = ('a'=>3,'b'=>4);
my %dot3 = ('a'=>5,'b'=>6);
my %dot4 = ('a'=>7,'b'=>8);
my @array = (%dot1,%dot2,%dot3,%dot4);
my %x = $array[2];
my $y = $x->{'a'};
print "$y \n";
Run Code Online (Sandbox Code Playgroud) 现在,在Perl的第2天,我看到数组也以元素(0)开头,如何在VBA中获取数组的最后一个索引,如ubound而不是使用标量(@array)的大小?
使用$ size = $#array是一种好方法还是有类似于标量(@array)的东西?
进一步找到我之前的问题Perl的答案:切割一系列哈希,我再次陷入困境,无法看到我做错了什么.
我拥有的是什么
数组(Array0(Hash0,Hash1),Array1(Hash0,Hash1),Array2(Hash0,Hash1)...)
use strict;
use warnings;
my @DDs = ();
my @Ds = ();
my %hsh = ();
my %dot1 = ( 'x' => 1, 'y' => 2, 'r' => 3 );
my %dot2 = ( 'x' => 4, 'y' => 5, 'r' => 6 );
my %dot3 = ( 'x' => 7, 'y' => 8, 'r' => 9 );
my %dot4 = ( 'x' => 1.1, 'y' => 1.2, 'r' => 1.3 );
my …Run Code Online (Sandbox Code Playgroud)