簡體   English   中英

Perl腳本中的奇數子例程編譯錯誤

[英]Odd subroutine compilation errors in Perl script

為了比較,分別將兩段ASCII文本(一個L =長,一個S =短)讀入@arrayOne和@arrayTwo。 以下子例程&analyse從smart.pl代碼獲取兩個數組引用,但是在通過perl -c smart.pl檢查時拋出錯誤。 不幸的是,我不知道為什么:

68  sub analyse {
69      my $arraysize ; my $arrLref ; my $arrSref ; my $item_L ; my $item_S ; my $value ;
70
71      $arrSref = shift ; $arrLref = shift ;
72      $item_S = shift @{ $arrSref } ;
73      $item_L = shift @{ $arrLref } ;
74
75      $arraysize = $#{ $arrSref } ;
76      while ( $arraysize > 0 ) {
77          $value = ( $item_S cmp $item_L ) ;
78          given ( $value ) {
79              when ( -1 ) {
80                  push ( @mergedArray , $item_S ) ;
81                  $item_S = shift @{ $arrSref }
82              }
83              when ( 0 ) {
84                  push ( @mergedArray , $item_L ) ;
85                  $item_S = shift @{ $arrSref } ;
86                  $item_L = shift @{ $arrLref }
87              }
88              when ( 1 ) {
89                  push ( @mergedArray , $item_L ) ;
90                  $item_L = shift @{ $arrLref }
91              }
92              default { &die }
93          }
94      }
95  }

使用以下語句中止編譯:

    $ perl -c smart.pl 
    syntax error at smart.pl line 78, near ") {"
    syntax error at smart.pl line 83, near ") {"
    syntax error at smart.pl line 88, near ") {"
    Global symbol "$item_L" requires explicit package name at smart.pl line 89.
    Global symbol "$item_L" requires explicit package name at smart.pl line 90.
    Global symbol "$arrLref" requires explicit package name at smart.pl line 90.
    syntax error at smart.pl line 91, near "}"
    smart.pl had compilation errors.

也許其他人有線索? 預先感謝–DrP-

根據Perl文檔 ,為了使用givenwhen ,需要滿足兩個條件:

  1. 您需要use feature "switch";
  2. 您需要Perl 5.10.1+

那應該可以解釋您在第78、83和88行看到的內容。

關於在第89行和第90行上看到的警告,這些警告與use strict;的使用有關use strict; ,並在這里找到這些警告的很好的解釋。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM