2016-02-28 91 views
-1

我運行下面的Perl腳本時:零非法分裂運行Perl腳本

#!/usr/bin/env perl 

$file1 = $ARGV[0]; 

system("analyze $file1 M | grep Moments -A 4 > inertia.dat"); 

open(INFILE, "inertia.dat") or die "Can't open file: $!"; 

$line = <INFILE>; 
$line = <INFILE>; 
$line = <INFILE>; 
$line = <INFILE>; 
$line = <INFILE>; 

$I1 = substr($line,16,12); 
$line = <INFILE>; 
$I2 = substr($line,16,12); 
$line = <INFILE>; 
$I3 = substr($line,16,12); 
$line = <INFILE>;  

if (($I1>$I2) && ($I1>$I3)) {$I1 = <Imax>;} 
if (($I2>$I1) && ($I2>$I3)) {$I2 = <Imax>;} 
if (($I3>$I1) && ($I31>$I2)) {$I3 = <Imax>;} 
if (($I1<$I2) && ($I1<$I3)) {$I1 = <Imin>;} 
if (($I2<$I1) && ($I2<$I3)) {$I2 = <Imin>;} 
if (($I3<$I1) && ($I3<$I2)) {$I3 =<Imin>;} 

$delta = ((<Imax>)-(<Imin>))/(<Imax>); 
print "$I1 $I2 $I3\n"; 

close INFILE; 

當我運行該文件,我得到「非法除數爲零第45行」

45號線

$delta = ((<Imax>)-(<Imin>))/(<Imax>); 

的inertia.dat文件的一個例子是:慣性和主軸的

矩:

  Moments (amu Ang^2)   X-, Y- and Z-Components of Axes 

      102508.853    0.096680 0.000809 -0.995315 
      114243.409    0.393377 -0.918614 0.037464 
      118155.898    -0.914280 -0.395156 -0.089130 

回答

6

首先,use strict; use warnings;位於您編寫的每個perl腳本的頂部。這會告訴你關於第二個問題:

其次,你正試圖從命名ImaxImin文件句柄來讀取,所以當然你要除以零(或者更確切地說,不確定的,這是獲得強制轉換爲在這種情況下爲零)。這些文件句柄不存在於您的腳本中。