perl函式中的傳引用用法

2021-06-19 07:15:49 字數 1414 閱讀 4957

自己的**

sub inshash="1";

}close(infile);

#while(($key,$value)=each%ref_hash_field)           }

inshash($tmp_filenm_src_2,\%hash_field_src);

perl中的是如何在函式中使用引用引數的。有時不想返回陣列或者其他形式,希望直接修改函式的引數的例項的具體的值,作為返回,就c中的傳遞引用引數一樣。

這樣在perl中是怎麼寫的呢? 查了一下文件,perl中的引用應該是通過」\「 來寫的,就像c中&操作符取位址一樣。

所以你寫

$var1= \$var2 ;

就建立了乙個名字$var1的引用,引用的是$var2; 有了引用你就可以修改原有的變數的值了,但還要通過的乙個類似c中的* 操作符的 "$"符號,表示對引用再取值,所以當

$$var1="11111" ;

這樣的語句的到執行的時候,$var2的值就被修改了。不過注意的是如果你使用的是陣列的引用,像這樣:

$var1= \@var2 ;

那麼你等會要獲取$var1指向的陣列,應該寫 @$var1 這樣了。

知道了perl的引用語法,所以想傳引用的話,就可以像下面的myfunc1 那樣寫就行了。

但我們又知道在子過程中@_ 這個陣列其實也是指向具體的引數的例項的,不是引數的拷貝。

所以你在函式裡面寫$var1 = \$_[0];的時候其實也是獲得了引數的引用。所以就可以寫出

myfunc2那樣的函式,注意傳給myfunc2的引數沒有加上\ 來表示引用了。不過竟然@_ 就可以直接

返問引數的原有例項了,那麼我們直接給他賦值不就行了嗎,我們還需要引用幹什麼呢,就像myfunc3做的那樣。它直接修改了引數的第乙個引數的值,也達到了c中傳引用的效果啦。

perl這個東西真是難用,語法奇怪的很!!!

--------------------------------

my $var1 ='0000000';

sub   myfunc1

sub   myfunc2

sub   myfunc3

print "var1 = $var1\n";

myfunc1(\$var1);

print "var1 = $var1\n";

myfunc2($var1);

print "var1 = $var1\n";

myfunc3($var1);

print "var1 = $var1\n";

------------------------------

執行後輸出:

var1 = 0000000

var1 = 1111111

var1 = 2222222

var1 = 33333

PHP 迴圈 傳引用 用法及問題

不銷毀變數 echo 不銷毀變數 n arr 1,2,3 dump arr 記得測試 foreach 傳引用 foreach arr as val dump arr val 5 dump arr 執行結果如下 可以看出最後,最後給變數賦值,賦值影響了陣列最後資料 正確用法應該是 銷毀變數 echo ...

c 的引用用法

一 引用簡介 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數的直接操作完全一樣。引用的宣告方法 類別識別符號 引用名 目標變數名 例1 int a int ra a 定義引用ra,它是變數a的引用,即別名。說明 二 引用應用 引用作為引數 void swap int p1,int p2 函...

perl陣列硬引用 perl中的引用

為什麼使用引用?在perl4中,hash表中的value欄位只能是scalar,而不能是list,這對於有些情況是很不方便的,比如有下面的資料 chicago,usa frankfurt,germany berlin,germany washington,usa helsinki,finland n...