2010-09-24 41 views
0

我有一個關於Perl動態代碼的問題。是否有Perl中可用於執行代碼的構造。如何在Perl中運行動態代碼?

例如,

$command = " some command"; 
$perl -> execute($command); 

$command改變運行時間。對不起,我的術語。否則我不知道該如何解釋。

我想完成這個工作:我有一個函數爲數組中的每個引用執行一些命令。

...insert example call to function... 

假設每個引用都有一個關聯的標識符。

...insert sample reference... 
...say something about how you determine the identifier... 
...say something about how you want to use the identifier... 

我無法通過陣列迭代並執行用於每個引用因爲該命令的一部分針對每個參考而變化,因爲其具有所述標識符的一部分,並且有標識符沒有詳盡列表。例如,如果$r0具有標識符'r0',則應該執行命令$r0->test("r0")

+1

填寫我指出的位。 :) – 2010-09-24 21:10:52

回答

1

您可以使用eval

eval($command); 

the manual

的eval EXPR

在第一種形式,EXPR的返回值被解析並執行,就好像它是一個小小的Perl程序 ...

+1

是的,但我寧願你不要。我覺得這很令人毛骨悚然。 – Powertieke 2010-09-24 20:29:04

+0

非常感謝。 – Sinduja 2010-09-24 20:29:54

+0

「需要」有點強烈。我們甚至不知道他在做什麼。 – 2010-09-24 20:48:42

5

如果這是一個外部命令,那麼您可以使用system,反引號或Perl模塊之一。

如果您想在運行時編譯和執行Perl代碼,可以使用eval。在很多情況下,人們會濫用eval,因爲他們看不到更簡單的方式來完成任務。

如果你想根據情況決定運行哪個子程序,你可以做各種事情,包括使用軟引用(ick!,但有時候很有用),調度表等等。

如果你想基於一個變量的值來選擇一個方法,那太容易了:

$object->$method(...) 

但是,你必須告訴我們您正在嘗試完成的任務。


我還不確定你在問什麼,但它聽起來不像是動態的。我認爲這是你所描述的情況。告訴我如何接近這個是:

my @array = ([ 'r0', 'foo', 'bar' ]); 

foreach my $element (@array) { 
     my($identifier, @other_stuff) = @$element; 
     $element->test($identifier); 
     } 

這將真正幫助,如果你能表現出一定的樣本元素和更完整,如果連僞代碼,外形的你有什麼。我們只知道你在問題中告訴我們的是什麼,而不是你瞭解自己問題的所有信息。

+0

謝謝布萊恩。我正在嘗試完成此操作:我有一個函數爲數組中的每個引用執行一些命令。可以說每個引用都有一個關聯的標識符。我不能遍歷數組並且爲每個引用執行,因爲每個引用的一部分命令會因參考標識符的一部分而有所不同,並且沒有詳盡的標識符列表。例如,如果$ r0具有標識符'r0',則應執行命令$ r0-> test(「r0」)' – Sinduja 2010-09-24 20:46:26

+0

編輯您的問題以包含其他或澄清信息。向我們展示這些數組元素以及標識符如何映射到代碼上的示例。您給我們的信息越多,我們可以提供的幫助就越多。 – 2010-09-24 20:47:03

+0

我已經發布編輯的問題 – Sinduja 2010-09-24 20:51:21