2010-06-25 99 views
2
  1. 在Unix shell腳本中,我們使用值$?檢查前一個命令的退出狀態,其中零等於成功。我如何在Perl中做到這一點?Perl基本問題

  2. 當我運行perl -V我看到@INC中列出的一些路徑。如何添加到@INC的新路徑?

  3. 如何在GetOptions函數中設置參數的順序?我想-email是第一個參數,如果它作爲第二個參數給出,它應該失敗。

    GetOptions(
        'nemail' => sub {$ENV{EMAIL} = "Y"}, 
        'arg' => \$help 
    ); 
    
  4. 有什麼擴展.pl.pm之間的區別?我什麼時候需要使用.pm的擴展名?

  5. 當我寫use File::Copy時,代碼位於哪裏? use訪問哪個環境變量?

+3

阿拉夫,幾乎所有這五個問題都是互不相關的。在未來,對每個主題[請提出一個單獨的問題](http://stackoverflow.com/questions/ask)會更好。 – daxim 2010-06-25 08:44:58

回答

8
  1. 外部命令與system function推出,還設置了child error variable $?/$CHILD_ERROR。相反,你自己做這些檢查,使用autodie

    require IPC::System::Simple; 
    use autodie qw(:all); 
    system([0], 'foobar-command', '--option', '--yet-another-option'); 
    # 0 is allowed as an exit status, others will throw an exception 
    

    內部編程結構,例如來自模塊的子程序,使用錯誤檢查超出了你從shell編程中知道的內容。有多種方法可以做到這一點。大多數類型的成功和失敗都是通過函數的返回值來表示的,通常是undef意味着失敗,例如,通過閱讀documentation for File::Copy我們知道失敗的返回值爲0,並且通常的其他錯誤變量也被設置。

    use English qw($OS_ERROR) 
    use File::Copy qw(mv); 
    my $source = '/does_not_exist'; 
    my $destination = '/tmp'; 
    unless (mv($source, $destination)) { 
        warn "Move from $source to $destination failed: $OS_ERROR"; 
    } 
    

    另一種可能性是例外。您必須詳細瞭解:PBP的第13章和EPP的第11章。

    use Try::Tiny; 
    my $string; 
    try { 
        $string = Encode::decode('UTF-8', $octets_buffer, Encode::FB_CROAK) 
    } catch { 
        warn "Decoding failed: $_"; 
    } 
    
  2. 它被設計成參數可以是隨機順序。你爲什麼要那樣?有一個名爲require_order的配置設置,但它不完全是你想要的。

  3. .pl表示一個Perl庫,最像一個子程序集合,準備通過require包含在內。這是來自十多年前。 Windows上的人們也喜歡將這個擴展名擴展到普通的Perl程序,因爲操作系統是以擴展爲中心的,並且不適用於沒有擴展名的文件。

    .pm表示Perl module。模塊只是遵循一些附加約定的庫。這是來自Perl 5時代。

  4. File::Copy被翻譯成文件名File/Copy.pm這是在路徑之一在@INC,詳情再次看到require。在我的系統中,它將在/usr/lib/perl5,例如/usr/lib/perl5/5.10.0/File/Copy.pm

+0

非常感謝。不。我問的是在Perl中檢查任何命令的返回值。如果我執行FILE:MOVE命令或任何其他命令,我如何檢查退出狀態是否成功。在UNIX shell腳本中,我們可以檢查$ ?.在perl中是退出狀態0表示成功,就像在shell腳本中一樣。 看到維基百科的網站。使用Hello :: World;這裏是否需要世界詞彙? 「你好」字也應該與文件名同名。通常在java包中,我們有包名稱中的目錄名稱。 require_order需要在GET_OPTIONS COMMAND中設置? – Arav 2010-06-25 06:54:17