2009-11-02 263 views
-5

參見SO 1664677Perl的語法錯誤


我得到這個錯誤

2:語法錯誤: 「(」 意外

當我運行該腳本

- 所有幫助是非常讚賞

#!/usr/bin/perl 
use Digest::MD5 qw(md5_hex); 
printf "Usage : keygen.pl e-mail key-id\ne-mail : the one you provided\nkey-id : provided by hcf/hsfconfig\n"; 

$pad = pack("H2048", "00000000963007772c610eeeba51099919c46d078ff46a7035a563e9a395649e3288db0ea4b8dc791ee9d5e088d9d2972b4cb609bd7cb17e072db8e7911dbf906410b71df220b06a4871b9f3de41be847dd4da1aebe4dd6d51b5d4f4c785d38356986c13c0a86b647af962fdecc9658a4f5c0114d96c0663633d0ffaf50d088dc8206e3b5e10694ce44160d5727167a2d1e4033c47d4044bfd850dd26bb50aa5faa8b5356c98b242d6c9bbdb40f9bcace36cd832755cdf45cf0dd6dc593dd1abac30d9263a00de518051d7c81661d0bfb5f4b42123c4b3569995bacf0fa5bdb89eb802280888055fb2d90cc624e90bb1877c6f2f114c6858ab1d61c13d2d66b69041dc760671db01bc20d2982a10d5ef8985b1711fb5b606a5e4bf9f33d4b8e8a2c9077834f9000f8ea8099618980ee1bb0d6a7f2d3d6d08976c6491015c63e6f4516b6b62616c1cd83065854e0062f2ed95066c7ba5011bc1f4088257c40ff5c6d9b06550e9b712eab8be8b7c88b9fcdf1ddd62492dda15f37cd38c654cd4fb5861b24dce51b53a7400bca3e230bbd441a5df4ad795d83d6dc4d1a4fbf4d6d36ae96943fcd96e34468867add0b860da732d0444e51d03335f4c0aaac97c0ddd3c710550aa41022710100bbe86200cc925b56857b3856f2009d466b99fe461ce0ef9de5e98c9d9292298d0b0b4a8d7c7173db359810db42e3b5cbdb7ad6cbac02083b8edb6b3bf9a0ce2b6039ad2b1743947d5eaaf77d29d1526db048316dc73120b63e3843b64943e6a6d0da85a6a7a0bcf0ee49dff099327ae000ab19e077d44930ff0d2a3088768f2011efec206695d5762f7cb67658071366c19e7066b6e761bd4fee02bd3895a7ada10cc4add676fdfb9f9f9efbe8e43beb717d58eb060e8a3d6d67e93d1a1c4c2d83852f2df4ff167bbd16757bca6dd06b53f4b36b248da2b0dd84c1b0aaff64a0336607a0441c3ef60df55df67a8ef8e6e3179be69468cb361cb1a8366bca0d26f2536e2685295770ccc03470bbbb91602222f260555be3bbac5280bbdb2925ab42b046ab35ca7ffd7c231cfd0b58b9ed92c1daede5bb0c2649b26f263ec9ca36a750a936d02a906099c3f360eeb8567077213570005824abf95147ab8e2ae2bb17b381bb60c9b8ed2920dbed5e5b7efdc7c21dfdb0bd4d2d38642e2d4f1f8b3dd686e83da1fcd16be815b26b9f6e177b06f7747b718e65a0888706a0fffca3b06665c0b0111ff9e658f69ae62f8d3ff6b6145cf6c1678e20aa0eed20dd75483044ec2b30339612667a7f71660d04d476949db776e3e4a6ad1aedc5ad6d9660bdf40f03bd83753aebca9c59ebbde7fcfb247e9ffb5301cf2bdbd8ac2baca3093b353a6a3b4240536d0ba9306d7cd2957de54bf67d9232e7a66b3b84a61c4021b685d942b6f2a37be0bb4a18e0cc31bdf055a8def022d"); 

@pad = unpack("L256",$pad); 

@owner = unpack("C*",$ARGV[0]); 
@regid = reverse unpack("C*", pack("H*", substr($ARGV[1],5,4).substr($ARGV[1],10,4))); 

@tab = (@regid, @owner); 
$g = $pad[71]; 

foreach $c(@tab) 
{ 
    $i = ($c^$g) & 0xff; 
    $g = ($g>>8)^$pad[$i]; 
} 

$key = $g << 16; 
$g = ($g>>8)^($pad[$g & 0xff]); 
$g = ($g>>8)^($pad[$g & 0xff]); 
$key = $key | ((($g>>16)^$g) & 0xffff); 

$keystr = uc(unpack("H*", pack("N",$key))); 
$digest = md5_hex("$keystr\n"); 

$keystr = $keystr.uc(substr($digest,0,4)); 
$keystr =~ s/^(..)(..)(..)(..)(..)(..)$/\1-\2-\3-\4-\5-\6/; 
printf "key: %s\n", $keystr; 
+0

爲什麼有一個linux標籤(和一個linux關鍵字在問題中)? – schmrz 2009-11-02 23:51:17

+1

語法錯誤是什麼? – 2009-11-02 23:53:23

+0

@schmrz,我更新了標籤和問題標題 – friedo 2009-11-03 00:44:13

回答

5

這可能與您運行腳本的方式有關。

張貼有沒有明顯的問題,但我知道你的錯誤,當我像這樣運行

$ ksh so.pl 
so.pl: syntax error at line 2: `(' unexpected 

./so.plperl ./so.pl給腳本:

Usage : keygen.pl e-mail key-id 
e-mail : the one you provided 
key-id : provided by hcf/hsfconfig 
key: D4-33-EE-90-41-55 
+1

:) http://perldoc.perl.org/perldiag.html#syntax-error-at-line-%d:-%60%s%27-unexpected – ysth 2009-11-03 04:49:32

+0

@ysth - 確實 - OP文章中的錯誤是不是來自perl。 – 2009-11-03 07:07:05

2

我剛跑過去,沒有收到語法錯誤?

+0

也許他們正在使用一個意外的舊Perl。 'perl -v'說什麼? – 2009-11-03 00:09:54

9

看起來像你沒有使用use strict; use warnings; - 你應該總是有這在每個Perl文件的頂部。

0

'的perl -wc XXX'(其中xxx是複製的腳本)給出:

\1 better written as $1 at xxx line 30. 
\2 better written as $2 at xxx line 30. 
\3 better written as $3 at xxx line 30. 
\4 better written as $4 at xxx line 30. 
\5 better written as $5 at xxx line 30. 
\6 better written as $6 at xxx line 30. 

鱈魚e爲我編譯並運行。我想知道這條很長的路線是否會造成麻煩?這是2073個字符,而有些系統可能運行POSIX2_LINE_MAX的犯規是2048

(在MacOS X 10.5.8,我想「貓> XXX」,然後是腳本的糊狀(命令-V)和'cat'卡住了長長的一行 - 我打斷了它,最後我用'vim xxx',結果表現很好。)