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;
}
#
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;
}
#
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 "];
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;
}
#
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;
}
#
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第三版。