2014-11-23 10 views
2

У меня есть ошибка «неинициализированное значение в конкатенации», которое подробно обсуждается на этом форуме и обычно относится к неопределенной переменной.Неинициализированное значение в конкатенации

Однако, как новичок, я коротко говорю о «почему» проблема существует в коде ниже.

Ошибка относится к переменным $ sb и $ filesize.

Любое понимание очень ценится.

спасибо !!!


#!/usr/bin/perl 

use strict; 
use warnings; 
use File::stat; 

#The directory where you store the filings 
my $dir="/Volumes/EDGAR1/Edgar/Edgar2/10K/2009";  

opendir(DIR, $dir) or die $!; 

while (my $file = readdir(DIR)) { 

# Use a regular expression to ignore files beginning with a period 
    next if ($file =~ m/^\./); 

#my $form_type=substr($line,62,12); 
#my $cik=substr($line,74,10); 
#my $file_date=substr($line,86,10); 

#Note that for file date, we need to get rid of 
#the - with the following regular expression. 
#month-day-year and some years there is not. 
#This regular expression 
#my $file_date=~s/\-//g; 
my $filesize = -s "$file"; 
my $sb = (stat($file))[7]; 

print "$file,$sb,$filesize\n"; 

} 

closedir(DIR); 
exit 0; 

ответ

5

Вы используете File::stat модуль. Этот модуль реализует функциональность stat, которая переопределяет встроенный Perl. И он возвращает объект вместо списка. Так что это:

my $sb = (stat($file))[7]; 

Причины $sb неопределен, потому что есть только один объект в списке. Вместо этого вы используете функции модулей:

my $sb = stat($file)->size(); 
Смежные вопросы