2011-07-11 37 views
-5

我有ClassA和我在CLASSAPerl的接入全球陣列

our @myArray = {"1","2","3","4"} 

定義一個全局陣列I具有CLASSB其中我有CLASSA的對象。我嘗試訪問myArray如下。

$my_obj_of_classA->{'myArray'} 
$my_obj_of_classA->{'\@myArray'} 
$my_obj_of_classA->{\@myArray} 

這些都不起作用。我得到一個錯誤說:

全局符號「@my_array」需要明確的包名

+0

它給了什麼錯誤? – Flimzy

+1

'use strict;','use warnings;'並嘗試寫一些至少*看起來像Perl的東西。 – friedo

+1

離開全局狀態,並開始傳遞參數。 –

回答

2

這個問題對Perl中全局變量和對象的工作方式有着深刻的誤解。它看起來像你期待@myArray在Ruby中的行爲類似於一個類變量,你可以在該類的任何給定對象上訪問它。這不是Perl中的全局變量。

我可以回答你的問題,但你會碰到另一個誤會。我認爲最好是從頭開始備份並至少刪除Perl。審查Modern Perl將是一個好主意。

+0

我是一名Java程序員。試圖在perl中快速執行某些操作,並堅持這一點。如果你能回答我的問題,我將不勝感激。 – user238021

+2

@ user238021對不起,沒有一個基本的語言理解,你會回到另一個基本問題。而且上帝知道你還會對那個可憐的Perl程序做些什麼,我不會給你彈藥。看書或聘請承包商。 – Schwern

0

這意味着@my_array沒有被定義爲一個全局變量。由於您沒有發佈實際的代碼,因此我無法提供更多信息。當然,這也不是真的提供任何信息,因爲它只是告訴你錯誤信息告訴你什麼。

如果你改善你的問題,我會改進我的答案。

+0

你需要什麼信息。請告訴我。我的數組聲明是不正確的,是我訪問它的方式不正確。它是什麼?在這種情況下,如何提供我的代碼的邏輯有幫助。 – user238021

4

首先,這:

package classA; 
... 
our @myArray = {"1","2","3","4"} 

聲明瞭一個包(有時稱爲全局)變量@classA :: myArray的,包含一個單一的元素,其值是一個hashref。我懷疑你的意思是這個:

our @myArray = ("1","2","3","4"); 

其次,你可以僅僅通過完全限定它作爲@classA::myArray訪問數組從任何其他包。 Perl不提供自動提供的用於與全局變量交互的類或對象方法。如果你願意,你可以在你的CLASSA創建一個作爲簡單的話說:

sub myArray { \@myArray } 

,如果你想,如果你想它(在列表上下文中去的數組的引用或

sub myArray { @myArray } 

)來獲取數組的元素。