perl 哈希作为参数实例

http://blog.sina.com.cn/s/blog_6436b8ec0100pu6a.html

#!/use/bin/perl
use strict;

 

sub changehash{
        my (%local_hash) = @_;
        $local_hash{mammal} = 'bear';
        return;
}
my %hash = (fish=>'shark',bird=>'robin');
changehash(%hash);
foreach my $newk (sort keys %hash){
        print "$newk\n";
}

在上面的例子中,当按正常情况传递哈希结构时,@_取得原始哈希结构%hash中每个关键字值对的各个值。在子例程changehash()中,现在放入@_中的哈希结构的各个元素被拷贝到称为%localhash的新哈希结构中。哈希%localhash被修改,该子例程返回。当子例程返回后,%localhash就被撤消,而程序的主要部分中的%hash则保持不变。


在下面这个例子中,对%hash的引用通过@_被传递到子例程changehash()中。该引用被拷贝到标量$href中,它仍然指原始哈希%hash。在子例程中, $hash指向的哈希结构被修改,子例程返回。changehash()返回后,原始哈希结构%hash将包含新关键字bear。

----------------------------------------------------------------------------------------------------


#!/use/bin/perl
use strict;

 

sub changehash{
        my ($href) = @_;
        $$href{mammal} = 'bear';
        return;
}
my %hash = (fish=>'shark',bird=>'robin');
changehash(\%hash);
foreach my $k (sort keys %hash){
        print "$k\n";
}


这个样子的

#!/usr/bin/perl

my %hash = (
    a => 1,
    b => 2,
    c => 3,
);

sub print_hash {
    my %hash = (@_);    # @_ 处括号可有可无
    foreach $key (keys %hash){
        print "key is $key,value is $hash{$key}\n";
    }
}

sub print_hash_2 {
    my ($hash) = @_;    # ($hash) 处括号必须有,取得原先 %hash 地址
    my %hash = %$hash;
    foreach $key (keys %hash){
        print "The key is $key,the value is $hash{$key}\n";
    }
}

&print_hash(%hash);    #直接调用 %hash
print "\n\n";
&print_hash_2(\%hash);    #调用 %hash 地址

你可能感兴趣的:(语言基础)