日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

符号引用(typeglob,别名)与全局变量的修改

發(fā)布時(shí)間:2025/3/20 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 符号引用(typeglob,别名)与全局变量的修改 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

符號(hào)引用(typeglob,別名)與全局變量的修改

不能以為在子函數(shù)里修改了一個(gè)和全局變量同名的變量就會(huì)修改全局變量:
#!/usr/bin/perl

$glov = "hello";

change;

print $glov;

sub change {
????????$glov = "world";
}
雖然在子程序 change 里的 $glov 變量和全局變量 $glov 名字相同,但兩個(gè)并不是同一個(gè)變量,子程序里的變量為局部變量。

在子程序里修改全局變量的一種方法是利用“符號(hào)引用”。

符號(hào)引用類似與 Linux 里的軟連接概念,它又稱為別名。創(chuàng)建一個(gè)變量的別名的方法是在實(shí)際變量的前面加上一個(gè) "*" 符號(hào)。星號(hào)("*") 適用于任意類型的變量,包括標(biāo)量,數(shù)組,散列,文件句柄,子函數(shù)等。

別名是符號(hào)表中針對(duì)同名標(biāo)識(shí)符的另一個(gè)名稱,比如 *name 可以表示 $name, @name 以及 %name, &name 等。

當(dāng)通過別名按引用傳遞方式將別名傳遞到函數(shù)中時(shí),需要用 local 函數(shù)聲明一個(gè)私有變量用以接收傳遞進(jìn)來的別名,該私有變量也就是另外一個(gè)別名,然后修改該私有變量也就等效于修改了傳遞進(jìn)來的全局變量。如下程序所示:
#!/usr/bin/perl

$glov = "hello";

&change(*glov);

print $glov, "\n";

sub change {
????????local(*alias) = @_;
????????print "$alias\n";
????????$alias = "world";
}
運(yùn)行輸出:
$ ./changeglobv.pl
hello
world
上面,不能用 my 來聲明這個(gè)私有變量,因?yàn)?my 函數(shù)所創(chuàng)建的變量名稱并不保存在符號(hào)表中,而是位于臨時(shí)緩沖區(qū)中。由于 typeglob 僅能關(guān)聯(lián)到特定的符號(hào)表上,因此 my 不能對(duì)它進(jìn)行私有化,所以要讓 typeglob 本地化就必須使用 local 函數(shù)。

測(cè)試代碼2
#!/usr/bin/perl

$colors = "rainbow";
@colors = ("red", "green", "yellow");

&printit(*colors);???????? #傳遞進(jìn) colors 數(shù)組的別名

sub printit {
????????local(*whichone) = @_;
????????print *whichone, "\n";

????????$whichone = "hello world";
????????$whichone[0] = "BLUE";?????????? #修改數(shù)組中的元素
}
運(yùn)行輸出:
$ ./alias.pl
*main::colors???????????? #告知 *whichone 是 main 中 colors 的別名
Out of subroutine.
$colors is hello world.
@colors is BLUE green yellow.

測(cè)試代碼3
#!/usr/bin/perl

@n = split(' ', <STDIN>);

&params(*n);

sub params {
????????local (*arr) = @_;

????????print 'The values of the @arr array are ', @arr, "\n";

????????print "The first value is $arr[0]\n";

????????print "the last value is ", pop(@arr), "\n";

????????foreach $value (@arr) {
????????????????$value += 5;
????????????????print "The value is $value.\n";
????????}
}
print "Back in main\n";
print "The new values are @n.\n";
運(yùn)行輸出:
$ ./alias2.pl
1 2 3 4 5?????? #輸入命令行參數(shù)
The values of the @arr array are 12345
The first value is 1
the last value is 5
The value is 6.
The value is 7.
The value is 8.
The value is 9.
Back in main
The new values are 6 7 8 9.

測(cè)試代碼4
該例子演示通過引用傳遞文件句柄。如果要直接把文件句柄傳遞給子函數(shù),唯一的途徑就是通過引用(注意,還有個(gè)硬引用,這里不涉及)。
#!/usr/bin/perl

open (HD, "<hello.txt") || die "Can not open file: $!";???? #以只讀方式打開文件 hello.txt,并建立相應(yīng)句柄 HD

&readit (*HD);

sub readit {
????????local(*myfile) = @_;?????? #給本地別名 myfile 賦值,即將別名傳遞給子例程
????????while (<myfile>) {?????? #別名是文件句柄 HD 的另一個(gè)名字,while 循環(huán)逐行讀取文件句柄中的各行內(nèi)容
????????????????print;
????????}
}


在上面,別名可以同時(shí)匹配多種類型。如果你只想匹配特定的一種,那么此時(shí)需要用反斜杠運(yùn)算符,Perl 的引用機(jī)制允許對(duì)某類特定變量而不是所有變量類型使用別名,如:

*array = \@array;?? # *array只引用數(shù)組
*scalar = \$scalar;????# *saclar 只引用變量
*hash = \%assoc_array;????# *hash 只引用散列表
*func = \&subroutine;?? # *func 只引用子函數(shù)


測(cè)試代碼5

#!/usr/bin/perl

@list = (1, 2, 3, 4, 5);

*arr = \@list;??#*arr 此時(shí)只對(duì) @list 數(shù)組引用
print @arr, "\n";
print "$arr\n";???????? #arr 已經(jīng)只能引用數(shù)組而不能引用普通變量,這里內(nèi)容為空

sub alias {???? #修改數(shù)組
????????local (*a) = @_;
????????$a[0] = 7;
????????pop @a;
}

&alias(*arr);
print "@list\n";

$num = 5;
*alnum = \$num; # scalar 只引用變量而不能引用數(shù)組
print "@alnum\n";
運(yùn)行輸出:
$ ./chalias.pl
12345

7 2 3 4

轉(zhuǎn)載于:https://www.cnblogs.com/cosiray/archive/2012/03/21/2409676.html

總結(jié)

以上是生活随笔為你收集整理的符号引用(typeglob,别名)与全局变量的修改的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 老司机午夜影院 | 日韩欧美在线视频免费观看 | 91美女精品 | av官网在线观看 | av网址免费在线观看 | 神马久久春色 | 亚洲一级色 | 自拍1区 | 这里只有精品免费视频 | 性少妇xxxxx| 无码人妻av免费一区二区三区 | 超碰95在线 | 最新视频 - 88av | 老司机av影院 | 久草青青| 国产又色又爽无遮挡免费动态图 | 91精品国产欧美一区二区 | 色婷婷色婷婷 | 国产第一亚洲 | 一级特黄视频 | 日韩免费视频一区二区 | 第一毛片 | 亚洲视频一区二区 | 在线观看你懂的视频 | 国产黄色小视频在线观看 | 久久久免费高清视频 | 麻豆视频在线观看 | 欧美偷拍精品 | 亚洲粉嫩 | 无码丰满熟妇 | 高清国产mv在线观看 | 国产最新在线视频 | 成人免费看片又大又黄 | 国产自产21区 | 欧洲美女与动交ccoo | 免费在线视频一区二区 | 伊人成长网 | 波多一区| 东北少妇不戴套对白第一次 | 理论片大全免费理伦片 | 自拍偷拍激情视频 | 自拍偷拍视频在线观看 | 国产丝袜视频在线 | 中文字幕激情视频 | 日韩欧美综合视频 | www.亚洲一区二区三区 | 大尺度摸揉捏胸床戏视频 | 不卡一区二区在线观看 | 一区在线视频 | 中出精品 | 99蜜桃臀久久久欧美精品网站 | 免费视频精品 | 一区二区三区四区精品视频 | 天狂传说之巴啦啦小魔仙 | 亚洲av无码一区二区三区人妖 | 久久精品免费 | 性色av一区二区三区红粉影视 | 天堂资源在线观看 | 美女露出粉嫩尿囗让男人桶 | 国产精品人妖 | 美女久久久久久久久久 | 久草中文在线 | 日本黄色动态图 | 天天干天天爽天天射 | 清纯唯美亚洲综合 | 日本顶级大片 | 久久国产精品久久精品国产 | 久久激情免费视频 | 亚洲一级视频在线观看 | 米奇7777狠狠狠狠视频 | free性娇小hd第一次 | 51成人做爰www免费看网站 | 天天干夜夜嗨 | 高清国产一区二区三区 | 无码国产精品一区二区高潮 | 尤物视频免费在线观看 | 国产精品综合一区二区 | 一级黄色性视频 | 污片在线免费看 | 日韩avv | 亚洲少妇激情 | 亚洲成人黄色网址 | 91精品系列| 日本中文字幕在线看 | 狠狠天天 | 久久精品一区二区三区黑人印度 | 亚洲AV无码一区二区三区性 | 久久免费在线 | 六月丁香婷婷综合 | 亚洲一二区 | 中文字幕欲求不满 | 飘花影院伦理片 | 6080av| 日本高清有码 | 欧美五月| 国产女主播在线播放 | 久久中文字 | 精品无码一区二区三区电影桃花 | 日韩久久久 |