我有一个包含X.pm方法的包data_x();
我使用类X的实例作为哈希的键%seen,比方说.
现在这些元素keys %seen似乎已经忘记了他们的祝福:
use X;
my( $x, $y, %seen );
$x = X->new();
$x->data_x( 1 );
print " x: ", $x, "\n";
print " x.data: ", $x->data_x(), "\n";
$seen{ $x } = 1;
$y = (keys %seen)[0];
print " y: ", $y, "\n";
print " y.data: ", $y->data_x(), "\n";
Run Code Online (Sandbox Code Playgroud)
这打印:
x: X=HASH(0x228fd48)
x.data: 1
y: X=HASH(0x228fd48)
Can't locate object method "data_x" via package "X=HASH(0x228fd48)"
(perhaps you forgot to load "X=HASH(0x228fd48)"?) at test.pl …Run Code Online (Sandbox Code Playgroud) 以下Perl代码进入无限循环.它看起来像each在子程序调用后重置.为什么会这样?
#!/usr/bin/perl
use warnings;
use strict;
my %h = ( "a" => "b" );
while ( my ($x, $y) = each %h ) {
&do_something( \%h );
}
sub do_something(){
my %tmp = %{$_[0]};
}
Run Code Online (Sandbox Code Playgroud)
有趣的是,这有效:
while ( my ($x, $y) = each %h ) {
&do_something( \%h );
}
sub do_something(){
}
Run Code Online (Sandbox Code Playgroud)
虽然这不是:
while ( my ($x, $y) = each %h ) {
&do_something( %h );
}
sub do_something(){
}
Run Code Online (Sandbox Code Playgroud)