Perl在调用方法

时间:2013-06-11 14:30:03

标签: perl

请告诉我这是什么意思

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。然后它给了哈希。我无法访问其中的值。我该如何访问它。请回复。

3 个答案:

答案 0 :(得分:5)

  

这是什么意思

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


  

然后它给了一个哈希。

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


  

我该如何访问它。

keys(%$keepers)

$keepers->{$key}

答案 1 :(得分:0)

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

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

use Data::Dumper;
warn Dumper( $keepers );

答案 2 :(得分:0)

你的问题2:

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

这是什么意思?

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

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

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

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

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