青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

那誰的技術博客

感興趣領域:高性能服務器編程,存儲,算法,Linux內核
隨筆 - 210, 文章 - 0, 評論 - 1183, 引用 - 0
數據加載中……

Perl學習筆記(二)--my, our, local 以及 typeglob

Perl中有兩種名字空間(namespace):符號表(symbol table)和詞法作用域(lexical scopes).在Perl中, 每個包(Package)有一個
符號表, 可以通過Packeagename::獲取包中的變量.
比如:
package A;
$test = 1;
可以通過$A::test訪問包A的變量test.
符號表是一個Hash表, 該Hash表的名字就是符號表所在包的名字.
比如你可以用下面的語句打印出在main包中的所有符號:
foreach (keys %main::)
{
    print $_, "\n";
}

又比如, 如果在程序中聲明了:
$test = 1;
可以通過$main::test來訪問該變量(假設變量是在main包中).

在同一個符號表中, 可以存在同樣名字的標量變量, 數組變量, Hash變量, 函數變量等.Perl中采用*符號來表示一個typeglobs,意思
就是"所有名字為XX的變量",比如:
$type = *test;
此時變量type中存放的就是當前包中所有名字為test的變量,
如果我們調用語句:
print $$type;
則將$type所指向的變量解釋為標量, 類似的可以解釋為數組, Hash, 函數等等.

但是, 如果你僅僅想讓這個typeglobs作用于一個類型的變量, 也可以明確的指出來, 如:
*dick = \$richard;
這樣dick變量就只能訪問名為richard的標量了.

可以把typeglobs想象為另一個typeglobs的別名, 當寫下代碼
$type = *test;
的時候, type就是test這個typeglobs的別名了.

Perl中還支持符號引用, 它可以根據一個標量存放的字符串去查找名為該字符串的typeglobs,如:
$test = 1;
$name = "test";
print $$name;
Perl解釋器首先去解釋變量$name, 發現是一個字符串, 再根據該字符串去解釋這個解引用, 也就是說:
$$name -> $test -> 1


在Perl中, 變量的名字是可以和Perl的關鍵字同名的, 只要在使用的時候有"足夠的辦法"讓Perl解釋器去明確辨別出來到底是哪種變量.
比如我寫了一個名為for的函數, 一般而言, 在Perl中, 函數調用是可以省略掉前面的&符號的, 但是在這里對這個名為for的函數則不行,
Perl會把它解釋為for循環.因此, 要明確的表示是在調用一個叫for的函數, 需要在前面加上&符號.對其它類型的變量, 這個例子同樣適用.
在<<Perl語言編程>>(大駱駝)中, 將$&%@這幾種分別作用在不同類型變量前面的特殊符號稱之為"funny character".

在Perl中, 有三種修飾符是修飾變量的作用域的:our, my, local,它們與前面提到的Perl中的作用域息息相關.
our聲明的變量是包全局的, 也就是說, our聲明的變量會出現在這個包的符號表中;my聲明的變量僅作用于一個塊(block), 在Perl中,
一對{}包起來的部分稱之為一個塊, 比如一個函數是一個塊, 一個循環是一個塊,等等,my修飾的變量普遍作用于這些地方, 如果沒有在哪一個
塊中, 那么就僅作用于當前文件, 但是,無論如何, my修飾的變量都不會進入一個包的符號表中, 這也就意味著my聲明的變量不能使用typeglobs
進行訪問, 如:
my $test = 1;

$type = *test;
print $$type;
這段代碼是沒有任何效果的, 因為在當前包中找不到名字是test的變量.把上面代碼中修飾變量test的my去掉, 再試試就知道區別了.

local是作用于那些在符號表中出現的變量的, 它讓對這些變量的修改局限在一個塊(block)中, 比如:
our $var;
$var = 1;
{
    local $var;
    $var = 2;
    print $var, "\n";
}
print $var, "\n";
打印的結果是
2
1
local的出現讓塊中對變量var的修改僅僅局限在這個塊中了.

總結:
1. Perl中有兩個作用域:符號表和詞法作用域, 每個包都有自己的符號表, 這樣可以避免名字污染問題的出現, 類似于C++中的
namespace, 全局變量, 以及用our修飾的變量都屬于這個作用域, 可以通過:包名稱::變量名稱來訪問一個包中的全局變量.而詞法作用域
是指的一個塊, 或者一個文件, 凡是由my修飾的變量都是詞法作用域中的變量, 它們不會出現在包中的符號表中, 在包之外不可見,
更甚者, 如果一個由my修飾的變量在一個塊中, 它就僅僅在這個塊中可見了.

2. 如果想讓對某個全局變量的修改局部化, 那么就使用local修飾符, 在出了這個塊之后, 自動恢復為全局變量原來的數據.

posted on 2008-07-31 14:09 那誰 閱讀(4800) 評論(0)  編輯 收藏 引用 所屬分類: Perl

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧洲av一区二区| 国产在线精品成人一区二区三区| 国产欧美日韩综合精品二区| 91久久精品日日躁夜夜躁国产| 一本色道久久综合亚洲精品婷婷| 亚洲黄色性网站| 免费高清在线视频一区·| 欧美成人小视频| 一本到高清视频免费精品| 欧美mv日韩mv亚洲| 亚洲视频欧美在线| 久久九九国产精品怡红院| 国产一区二区三区在线观看网站| 欧美a级大片| 欧美+日本+国产+在线a∨观看| 久久综合图片| 夜夜精品视频| 欧美国产日产韩国视频| 亚洲欧美国产不卡| 亚洲国产成人高清精品| 国产精品久久久久影院亚瑟 | 国产麻豆日韩欧美久久| 久久免费99精品久久久久久| 艳妇臀荡乳欲伦亚洲一区| 亚洲影院高清在线| 欧美黑人多人双交| 亚洲精品综合| 免费成人av在线看| 亚洲欧美国内爽妇网| 久久riav二区三区| 在线亚洲成人| 国产精品无码永久免费888| 99精品热视频只有精品10| 国产精品亚洲美女av网站| 激情五月***国产精品| 欧美激情免费在线| 性欧美大战久久久久久久久| 亚洲国产免费看| 欧美在线免费观看视频| 欧美成人福利视频| 欧美一区二区在线| 亚洲无线一线二线三线区别av| 精品动漫3d一区二区三区| 一本到高清视频免费精品| 久久综合五月| 久久久综合视频| 欧美一区=区| 亚洲精品小视频| 久久婷婷色综合| 国产在线欧美日韩| 亚洲欧美色婷婷| 日韩亚洲在线观看| 亚洲人成网站在线观看播放| 免费不卡视频| 欧美资源在线观看| 久久精品在线免费观看| 欧美在线一区二区三区| 国产精品一区二区你懂得| 中国女人久久久| 欧美亚洲网站| 巨乳诱惑日韩免费av| 亚洲一区二区四区| 欧美午夜精品久久久久久孕妇| 国产精品白丝av嫩草影院| 亚洲九九爱视频| 亚洲素人在线| 亚洲精品在线二区| 欧美日韩国产不卡| 国产精品激情偷乱一区二区∴| 国产精品区一区| 亚洲一二区在线| 亚洲视频综合在线| 久久久一本精品99久久精品66| 老鸭窝毛片一区二区三区| 狠狠综合久久av一区二区小说| 亚洲国产欧洲综合997久久| 久久久免费观看视频| 欧美在线三区| 伊人成综合网伊人222| 亚洲一区二区精品| 亚洲图中文字幕| 国产精品一区毛片| 久久久一本精品99久久精品66| 久久精品国产一区二区三| 亚洲国产精品第一区二区| 亚洲精品久久7777| 欧美性一二三区| 欧美在线观看天堂一区二区三区| 性做久久久久久| 91久久国产综合久久蜜月精品| 国产精品久久久久9999| 欧美一区二区三区精品| 久久久一二三| 亚洲视频每日更新| 欧美一区二区三区免费看| 欧美高清hd18日本| 国产原创一区二区| 欧美国产激情| 欧美性视频网站| 免费亚洲网站| 国产精品视频大全| 欧美激情黄色片| 国产精品伊人日日| 亚洲成人在线视频播放 | 免费观看成人鲁鲁鲁鲁鲁视频| 亚洲精选中文字幕| 香蕉久久一区二区不卡无毒影院 | 欧美一区二区福利在线| 久久久中精品2020中文| 亚洲综合视频一区| 99re热这里只有精品免费视频| 国产欧美日韩麻豆91| 亚洲成色www8888| 国产精品综合av一区二区国产馆| 欧美成人精品h版在线观看| 国产精品久久久爽爽爽麻豆色哟哟| 免费看亚洲片| 国产日韩精品一区| 夜夜爽av福利精品导航 | 亚洲欧洲一级| 国内外成人免费激情在线视频网站 | 国产综合网站| 亚洲一区在线视频| 亚洲一级片在线观看| 免费国产自线拍一欧美视频| 久久精品亚洲热| 久久精品国产久精国产一老狼| 国产欧美日韩另类视频免费观看| 亚洲人成久久| 亚洲人成精品久久久久| 久久爱www.| 久久青草欧美一区二区三区| 国产精自产拍久久久久久| 在线视频精品一| 亚洲一级一区| 欧美日韩视频专区在线播放 | 国产精品主播| 亚洲图片欧洲图片日韩av| 亚洲无人区一区| 亚洲香蕉伊综合在人在线视看| 最新日韩欧美| 欧美成人一二三| 亚洲伊人观看| 国产精品美女www爽爽爽视频| 亚洲精品免费在线播放| 亚洲精品日韩一| 欧美一区=区| 久久国产精品99国产| 国产拍揄自揄精品视频麻豆| 午夜亚洲性色视频| 久久精品中文字幕一区二区三区| 国产日韩欧美成人| 亚洲大胆人体视频| 欧美日韩国产在线播放| 最新热久久免费视频| 一本色道久久综合亚洲精品不| 欧美国产综合一区二区| 99re热这里只有精品免费视频| 亚洲欧美在线x视频| 国产一区二区久久久| 久久婷婷国产综合国色天香| 亚洲精品综合精品自拍| 欧美在线不卡视频| 伊人久久成人| 欧美日韩视频一区二区| 午夜精品www| 亚洲一区二区精品视频| 国产精品久久久久久久久久免费看| 亚洲欧美变态国产另类| 99re热这里只有精品免费视频| 欧美日韩亚洲成人| 午夜久久久久久| 欧美高清hd18日本| 亚洲永久精品国产| 1024日韩| 久久尤物视频| 亚洲作爱视频| 久久一综合视频| 国产伦精品一区二区三区视频孕妇| 欧美中在线观看| 亚洲激情偷拍| 久久精品国产清自在天天线 | 亚洲毛片在线观看| 国产手机视频精品| 欧美日韩国产欧| 久久久国产精品一区| 亚洲精品久久久久久一区二区| 久久国产精彩视频| 亚洲制服欧美中文字幕中文字幕| 国内精品视频一区| 国产精品久久久久久久久久妞妞| 久久久一区二区| 欧美一区二区三区精品| 夜色激情一区二区| 最新国产成人av网站网址麻豆| 久久免费的精品国产v∧| 午夜在线精品偷拍| 一区二区欧美日韩| 亚洲精品国产拍免费91在线| 国产亚洲精品bt天堂精选|