Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Системное программирование > Segmentation fault


Автор: Andrey1 31.8.2004, 11:41
Написал скрипт, который должен парсить фортрановские подпрограммы (subroutine) в отдельные файлы, подпихнул ему файл в 800kb и тут сабж! Для маленьких файлов такой "байды" не было. Вылетает, видимо, в ...~=s/../.. Это как нибудь лечится?
Код

#!/usr/bin/perl -ws
#use Data::Dumper;
my $a_in=shift(@ARGV);
#open GR, $a_in or die;
#local $/;
#my $t = <GR>;
my $t='';
   open (my $fh, $a_in) or die "could not open $a_in\n";
   while  (<$fh>) {
       my $nline = $_;
#     chomp($nline);
       $t =join('',$t,$nline);
   }
   close ($fh) or die "could not open $a_in";

print "file $a_in was read\n";
#print "t=$t\n";

my ($c1,$s,$sn,$sb,$e,$res);
my $c = '[*|c|C]';
while ($t =~ s/(($c.*\n)*?)(\s+subroutine)\s+(\S*)((.*?\n+)*?)(\s+end)\n+//i) {
$c1=$1; $s=$3; $sn=$4; $sb=$5; $e=$7; $res = $c1.$s.$sn.$sb.$e;
print "Cut function $sn\n";
  my $fh;
   open ($fh, '>'.$sn) or die "could not open $sn";
   print $fh $res;
   close $fh;
}
print "Done\n";
print "The rest:-->", $t,"<--\n";

Автор: Secandr 31.8.2004, 12:29
Лечится:
Код
   open (my $fh, $a_in) or die "could not open $a_in\n";
  while  (<$fh>) {
      my $nline = $_;
      $nline=~s/****/****/;
  }
  close ($fh) or die "could not open $a_in";

Автор: Andrey1 1.9.2004, 11:42
Ладно. И часто случается "segmentation fault"? Какой размер строки можно обрабатывать заменой s/.../... ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)