韩半仙

  博客园  ::  :: 新随笔  ::  :: 订阅 订阅  :: 管理

a reference is a variable that refer to a value

 - as opposed to a variable that contains a value

example.pl

#!/usr/bin/perl
#

use strict;
use warnings;

main(@ARGV);

sub main
{
    my $var = "This is the Perl 5 references chapter.";
    my $ref = \$var;
    my $copy = $ref;
    message($$ref);
    $var = 42;
    message($$copy);
}

sub message
{
    my $m = shift or return;
    print("$m\n");
}

sub error
{
    my $e = shift || 'unknown error';
    print("$0: $e\n");
    exit 0;
}

variable contains value; reference point to value.


arrayref.pl

#!/usr/bin/perl
#

use strict;
use warnings;

main(@ARGV);

sub main
{
    my @list = ("This is the Perl 5 references chapter.",
    42,
    "another string",
    "one more value");
    my $var = \@list;
    message($var);
    my $copy = $var;
    message(join(':',@$var));
    message(join(':',@$copy));
    $copy->[2]=187;
    message(join(':',@$copy));
}

sub message
{
    my $m = shift or return;
    print("$m\n");
}

sub error
{
    my $e = shift || 'unknown error';
    print("$0: $e\n");
    exit 0;
}

这个例子包含了所有数组引用的内容:包括输出数组的内容,修改数组的元素值。我们可以将代码的部分写成一下的类型:

    my $var = ["This is the Perl 5 references chapter.",
    42,
    "another string",
    "one more value"];

这样构造了一个事实上的匿名数组引用, 并且和上面的结果完全等效。

hashref.pl

#!/usr/bin/perl
#

use strict;
use warnings;

main(@ARGV);

sub main
{
    my $hashref = {
       "name"=>"jimi hendrix",
       instrument=>"guitar",
       album=>"are you experienced"
    };
    my $copy = $hashref;
    $copy->{songs}= "puplehaze";
    foreach my $k (sort keys %$copy){
        my $v = $copy->{$k};
        message("$k:$v");
    }

}

sub message
{
    my $m = shift or return;
    print("$m\n");
}

sub error
{
    my $e = shift || 'unknown error';
    print("$0: $e\n");
    exit 0;
}

同理,上面的例子也是用了所有的关于hash的引用模型和例子。我们还是用的匿名引用。例子同数组部分。

mixed.pl

#!/usr/bin/perl
#

use strict;
use warnings;

main(@ARGV);
    my $artists=[
       {
           name=>"jimi hendrix",
           instrument=>"guitar",
           genre=>"rock"
       },
       {
           name=>"miles davis",
           instrument=>"trumpet",
           genre=>"jazz"
       },
       {
           name=>"ella fitzgerald",
           instrument=>"vocal",
           genre=>"jazz"
       },
    ];
    push @$artists,{name=>"yoyo ma", instrument=>"cello",genre=>"classic"};
    foreach my $artist (@$artists){
        message("$artist->{name},$artist->{instrument},$artist->{genre}");
    }
sub main
{

    my $var = "This is the Perl 5 references chapter.";
    message($var);
}

sub message
{
    my $m = shift or return;
    print("$m\n");
}

sub error
{
    my $e = shift || 'unknown error';
    print("$0: $e\n");
    exit 0;
}

更多内容还是参考intermediate perl或者programming perl第三版。

 

 

 

 

 

posted on 2012-03-10 21:31  韩英武  阅读(223)  评论(0编辑  收藏  举报