[perl 中别名用法

[perl 中别名用法

[perl 中别名用法


#######################################################

my $a = 50;
my $b = 100;

printf();

printf("\n\nswap 前 a : $a \n");
printf("swap 前 b : $b \n\n");
&swap (*$a, *$b);
printf("swap 后 a : $a \n");
printf("swap 后 b : $b \n");

sub swap
{
local (*pointer_1, *pointer_2) = @_;
my $temp;
$temp = $pointer_1;
$pointer_1 = $pointer_2;
$pointer_2 = $temp;

}

[color=#0000FF]问题一 local (*pointer_1, *pointer_2) = @_; # 为什么 必须要local 用my 不可以

问题二 $pointer_1 = $pointer_2; # 这边出现read-only value[/color]

不过我用call by address 观念去写就可以



my $a = 50;
my $b = 100;

printf();

printf("\n\nswap 前 a : $a \n");
printf("swap 前 b : $b \n\n");
&swap (\$a, \$b);
printf("swap 后 a : $a \n");
printf("swap 后 b : $b \n");

sub swap
{
my ($pointer_1, $pointer_2) = @_;
my $temp;
$temp = $$pointer_1;
$$pointer_1 = $$pointer_2;
$$pointer_2 = $temp;

}



my的话生成一个lexical变量,这个变量只在这个block内有效,退出这个block, my定义的变量就不存在了。local后面的还是package变量,只是给它一个临时值,退出这个block后,local后面的变量的值就恢复到以前的值了
了解~~谢谢----问题二.
了解~~谢谢

问题二 $pointer_1 = $pointer_2; # 这边出现read-only value
题二有谁知道原因???

谢谢
因为你调用swap时候写的是.
因为你调用swap时候写的是 *$a, 等于是 *{'50'} , 这是一个常量,所以是read-only
按照你的意思,应该写 swap(*a, *b)

*a 是一个typeglob,不是对 $a 的reference, 他表示在perl variable table 中 name = a 这一系列变量,可以是 @a, %a $a a