小编Kla*_*aus的帖子

Perl:hash-keys丢失了他们的类信息

我有一个包含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 hash class key

4
推荐指数
1
解决办法
445
查看次数

Perl hash:while-each-loop运行到无限循环

以下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)

perl hash each loops infinite-loop

2
推荐指数
1
解决办法
503
查看次数

标签 统计

hash ×2

perl ×2

class ×1

each ×1

infinite-loop ×1

key ×1

loops ×1