0

请告诉我这是什么意思

my ( $keepers, $bogus, $unknown ) =
   TCO::Test::Param::test_params('session' => $s, 'expected' => $allowed_params);

关于测试方法

my %base_profile = TCO::Test::Param::std_profile();
my $profile      = {
    'session'  => $base_profile{'session'},
    'expected' => $base_profile{'params'},
};
my %config = validate( @_, $profile );

my ( $s, $gooduns ) = @config{ 'session', 'expected' };

my ( $keepers, $bogus, $unknown ) =
    scrub_base( 'raw_params' => $s->{_raw_params}, 'expected' => $gooduns );

foreach ( keys %{$keepers} ) {
    $keepers->{$_} = $keepers->{$_}->[-1];
}

clean_params( { 'params' => $keepers } );

# These are sometimes passed in by carts and must be squashed if they are.
delete $unknown->{x_exp_date} if ( $unknown->{x_exp_date} );

delete $unknown->{x_card_num} if ( $unknown->{x_card_num} );

delete $bogus->{x_exp_date}   if ( $bogus->{x_exp_date} );

delete $bogus->{x_card_num}   if ( $bogus->{x_card_num} );

delete $keepers->{x_exp_date} if ( $keepers->{x_exp_date} );

delete $keepers->{x_card_num} if ( $keepers->{x_card_num} );

return ( $keepers, $bogus, $unknown );

2) $sale->{state}{ind} = 0; 这是什么意思?

我试图打印$keepers到 STDERR 。然后它给出一个哈希。我不能访问其中的值。我怎样才能访问它。请回复。

4

3 回答 3

5

这是什么意思

这是对 subroutine 的调用TCO::Test::Param::test_params。四个参数被传递给它。返回的前三个值存储在$keepers$bogus$unknown中。


然后它给出一个哈希。

它是对哈希的引用。一个 sub 不能返回散列,只是一个标量列表。


我怎样才能访问它。

keys(%$keepers)

$keepers->{$key}
于 2013-06-11T14:37:46.920 回答
0

TCO::Test::Param::test_params子例程返回一个列表。您询问的行将返回值解压缩为三个不同的变量$keepers$bogus$unknown

要查看 中的内容$keepers,您可以转储哈希:

use Data::Dumper;
warn Dumper( $keepers );
于 2013-06-11T14:37:26.937 回答
0

你的问题2:

$sale->{state}{ind} = 0; 

这是什么意思?

$sale必须是对哈希的引用。为什么?因为紧随其后->{ }。尝试:

use Data::Dumper;
print Dumper($sale);

引用的哈希$sale至少有一个键,称为state. key 的值state是对另一个哈希的引用。另一个散列至少有一个键,称为ind,并且该语句将其值设置为零。

即使密钥state不存在,也可以运行此语句。该语句将在称为autovivification的过程中自动创建密钥、它的值和第二个哈希。

建议:一次只问一个问题。它使答案更清晰,更易于其他人参考。就像子程序应该只做一件事一样,你的问题也应该这样做,并且出于同样的原因。

于 2013-06-11T15:23:46.357 回答