我不明白这个Perl语法,有没有人有任何想法?

时间:2011-11-17 07:57:22

标签: arrays perl reference perl-data-structures

我从Perl插件中获得了这部分内容。我不明白它的作用。它是关联数组的数组吗?如果是这样,那么它不应该以@开头吗?任何人都可以对这个问题有所了解吗?

my $arguments =
  [ { 'name' => "process_exp",
    'desc' => "{BasePlugin.process_exp}",
    'type' => "regexp",
    'deft' => &get_default_process_exp(),
    'reqd' => "no" },
  { 'name' => "assoc_images",
    'desc' => "{MP4Plugin.assoc_images}",
    'type' => "flag",
    'deft' => "",
    'reqd' => "no" },
  { 'name' => "applet_metadata",
    'desc' => "{MP4Plugin.applet_metadata}",
    'type' => "flag",
    'deft' => "" },
  { 'name' => "metadata_fields",
    'desc' => "{MP4Plugin.metadata_fields}",
    'type' => "string",
    'deft' => "Title,Artist,Genre" },
  { 'name' => "file_rename_method",
    'desc' => "{BasePlugin.file_rename_method}",
    'type' => "enum",
    'deft' => &get_default_file_rename_method(), # by default rename imported files and assoc files using this encoding
    'list' => $BasePlugin::file_rename_method_list,
    'reqd' => "no"
  } ];

3 个答案:

答案 0 :(得分:6)

正如Bwmat所说,它是对哈希引用数组的引用。读

$ man perlref

$ man perlreftut     # this is a bit more straightforward

如果你想了解更多关于参考文献的信息。

顺便说一句,在Perl中,您可以这样做:

@array = ( 1, 2 );          # declare an array
$array_reference = \@array; # take the reference to that array
$array_reference->[0] = 2;  # overwrite 1st position of @array

$numbers = [ 3, 4 ];        # this is another valid array ref declaration. Note [ ] instead of ( )

哈希也会发生同样的事情。

顺便说一句,在Perl中,您可以这样做:

%hash = ( foo => 1, bar => 2 );
$hash_reference = \%hash; 
$hash_reference->{foo} = 2;

$langs = { perl => 'cool', php => 'ugly' }; # this is another valid hash ref declaration. Note { } instead of ( )

而且......是的,您可以取消引用这些参考文献。

%{ $hash_reference }

将被视为哈希,因此如果您想打印上面$langs的键,您可以这样做:

print $_, "\n" foreach ( keys %{ $langs } );

要取消引用数组引用,请使用@{ }而不是%{ }。即使sub也可以取消引用。

sub foo
{
  print "hello world\n";
}

my %hash = ( call => \&foo );

&{ $hash{call} }; # this allows you to call the sub foo

答案 1 :(得分:1)

$arguments是一个数组引用(引用/指向数组的指针)

使用()初始化数组,使用[]

初始化数组引用
my @array = ( 1, 2, 3 );
my $array_ref = [ 1, 2, 3 ];

您可以使用\

创建参考
my $other_array_ref = \@array;

使用数组引用时,您将在使用时取消引用它:

for my $element ( @{$array_ref} )

print ${$array_ref}[0];

请参阅man perlref

回到你的问题:$arguments是对哈希引用数组的引用(用{}初始化)

答案 2 :(得分:0)

看起来像是hash of hashes引用。

您可能需要取消引用

%newhash = %{$arguments}

并将数据打印为

print $newhash{'name'}