2013-07-29 48 views
2

說我定義數組爲:

my @my_array = ["hello", "world"] 

有沒有在我的代碼使用$my_array VS \@my_array以後有什麼區別?

我推測它們都是對@array的標量引用,但我想我看過我的一個程序的行爲有所不同,具體取決於我使用的是哪一個。

他們之間有什麼區別嗎?

+1

請向我們展示如何在可疑代碼中定義'$ my_array'。你已經獲得了相當全面的'perlref'作爲答案,但它們並沒有幫助。看到你代碼中的差異*會幫助我們評論你期望或不期望的差異。 (的確,現在我要說,你所展示的代碼的主要區別在於'$ my_array'會在'use strict'下爆炸:)) – pilcrow

回答

12
  • @array是陣列
  • $var是標量
  • \@array是標量 - 參考陣列@array
  • ("hello", "world")是列表(@array兼容)
  • ["hello", "world"]標量,參照陣列。它與變量@array中的存儲數組("hello", "world")相同,然後從中取參考\@array

當使用:

my $my_array = ["hello", "world"] 

創建變量$my_array其是參考陣列("hello", "world")

當使用:

my @my_array = ["hello", "world"] 

創建含有單個元件的陣列:參照陣列("hello", "world")

+2

你的第五個項目符號點是false。 '\(「hello」,「world」)'與'(\「hello」,\「world」)'相同。 –

+0

@JimDavis:同意,修正。 doc參考:http://perldoc.perl.org/perlref.html – mvp

+0

謝謝mvp。我從這裏得知'\ @ my_array'和'$ my_array'之間沒有區別呢?我已更新OP以澄清任何可能的混淆。 –

1

\@my_array$my_array有什麼不同?這取決於:

my @my_array = qw(hello world); #Note the use of parentheses 
my $my_array = "Hello, I am just some random string!"; 

在上述情況下,存在\@my_array$my_array和之間的差。變量名稱中的相似並不一定意味着一種關係。

然而:

my @my_array qw(hello world); 
my $my_array = \@my_array; 

\@my_array$my_array和將是相同的。 @my_array中的更改將反映在參考文獻$my_array中。

在你的代碼有:

my @my_array = ["hello", "world"]; 

這實在是一個奇怪的語法......

[...]語法定義參考到一個數組。使用

my @my_array = ("hello", "world"); #Note the parentheses and not straight brackets 

看這個節目Data::Dumper

use strict; 
use warnings; 
use feature qw(say); 
use Data::Dumper; 
my @my_array = ["hello", "world"]; 
say Dumper \@my_array; 

輸出是:

大多數時候,你會看到這樣的事情:

my $array_ref = ["hello", "world"]; #Note the assignment to a scalar and not an array 

或本

$VAR1 = [ 
     [ 
     'hello', 
     'world' 
     ] 
    ]; 

什麼這就是說有一個單一元素的數組(即,@my_array僅包含$my_array[0]),並且該數組中的該元素是對包含兩個元素'hello'和'world'的另一個數組的引用。