2014-03-30 28 views
0

我在file1.pm文件 file1.pm變量如何在perl中使用查找文本作爲變量?

package oa; 
use strict; 
use warnings; 
our $first1= 'DTH'; 
1; 

現在想訪問變量中這個變量,這是我的主要程序,但我我以前不得到輸出我知道問題是「OA:$ VAR 「 我可以像這樣使用」/ oa :: $ var /「來訪問變量嗎?

#!/usr/bin/perl 
use file1; 
$input='DTH'; 
$var=first . 1; 
if($input =~ /oa::$var/){ 
print 「DTH」; 
} 

回答

4

Perl是不是PHP和$印記進來的包名稱的前面:如果您要訪問一個包變量,然後做$PackageName::var_name

./MyPackage.pm

package MyPackage; # package names should be CamelCase! 
use strict; 
use warnings; 

our $first1 = 'DHT'; 
1; 

./script.pl

use strict; 
use warnings; 
use MyPackage; 

my $input = 'DHT'; 
if ($input =~ /$MyPackage::first1/) { 
    print "DHT\n"; 
} 

但是,你也可以通過名稱指的一個變量。這是一件不好的事情,並且使得理解和維護這樣的程序幾乎是不可能的。您可以使用哈希而不是(也稱爲關聯數組,地圖,或字典):

MyPackage

our %stuff = (
    first1 => 'DHT', 
    other1 => 'foobar', 
); 

在腳本:

my $var = 'first1'; 
if ($input =~ /$MyPackage::stuff{$var}/) { 
    ... 
+0

我可以宣佈這樣的「使用D:/ myfiles/MyPackage「 –

+0

@ Kathir.K否,'use'運算符接受一個包名稱,然後搜索文件本身。但是你可以通過'use lib'D:/ myfiles /''添加新的搜索位置,之後'use MyPackage'會找到'D:/ myfiles/MyPackage.pm'←'.pm'擴展名很重要。或者,您可以手動加載文件:'BEGIN {require'D:/ some/path'; MyPackage-> import}'。 'require'可以加載任何文件名。對包名(不是文件名)的' - > import'調用對於確保正確的初始化非常重要。周圍的'BEGIN {...}'使得所有這些都在編譯時發生,就像'use'一樣。 – amon

+0

爲什麼我不能在mydatabase中打印文本,我用這個打印「$ MyPackage :: stuff {$ var}」;但不會工作。 –

相關問題