Fórum Ubuntu CZ/SK

Ubuntu pro osobní počítače => Software => Příkazový řádek a programování pro GNU/Linux => Téma založeno: Ebola 12 Srpna 2012, 20:58:31

Název: Perl odmítá otevřít ovladač open s proměnnou
Přispěvatel: Ebola 12 Srpna 2012, 20:58:31
Ahoj, už jsem z toho úplně zoufalý. Když chci číst ze souboru, tak mi celý cyklus zhavaruje a program se chová jako kdyby měl v tom cyklu <STDIN>, prostě jen entruju prázdné řádky a cyklus se odmítá ukončit. open(DATA, "nejakysoubor.txt"); mi ale funguje bez roblémů, v proměnné je to, co tam má být, takže absolutně nechápu, kde je problém. Dokázal by mi někdo poradit? Při rozebírání jsem to postupně oklestil až na současný krátký cyklus, který prostě nefunguje.

autovysledky je pole o 5 prvcích...

for $nula (0 .. (scalar @autovysledky)){
  $prubezny = $autovysledky[$nula];
  print $prubezny;
  chomp $prubezny;
  open(DATA, $prubezny); #zde je problém, bez tohoto řádku to bez problému skončí
  my $pocetodstavcu; my $integ=0; my $zdroj; my $aaa = 0; my $aac; my $aab;
  my ($fullup, $fulldown); my $tmpmaily; my $nahradit;
  @src = <DATA>;
  close DATA;
  open(EDITOVAN, ">tmp/cached.dat");close EDITOVAN;
  $pocetodstavcu = scalar @src;
  $pocetodstavcu--;
  chomp @src;
  $integ = 0;
}
Název: Re:Perl odmítá otevřít ovladač open s proměnnou
Přispěvatel: Martin Kiklhorn 15 Srpna 2012, 03:24:04
scalar @autovysledky vrací předpokládám počet prvků, tedy 5

Tipnul bych že 0 .. 5 znamená 6 průchodů

takže
for $nula (0 .. (scalar @autovysledky -1)){
by mohlo pomoci

a možná bych ještě testoval úspěšné otevření souboru
open(DATA, $prubezny) or die !$;

Ale berte to s velkou rezervou, perl jsem viděl akorát z rychlíku.

Název: Re:Perl odmítá otevřít ovladač open s proměnnou
Přispěvatel: Ebola 17 Srpna 2012, 11:27:01
Nakonec jsem to po dvou dnech vyřešil, podmínku v cyklu for jsem zjednodušil, skalární délku pole jsem hodil do proměnné ještě před cyklem. Očividně tedy perl není asi ideálním jazykem, neboť jsem se setkal také s problémem kdy například podmínka ($a >= $b) při trojciferných číslech udělal jenom deset cyklů (bral pouze první cifru z proměnné). Vyřešil jsem to nahrazením > < == != za lt gt eq ne, pak vše fungovalo bez jakékoli další změny. Přitom s ohledem na to, že pracuju ve striktním módu, by takového "nedorozumnění" nejspíše vznikat nemělo.

Jinak problém jsem teda nakonec vyřešil jak jsem psal v úvodu. Děkuju za odpověď.  ;)
Název: Re:Perl odmítá otevřít ovladač open s proměnnou
Přispěvatel: MacHala 17 Srpna 2012, 11:52:12
striktni mod nic moc neznamena, ten te upozorni napr na nedeklarovane promene, vicemene relativni drobnosti vzhledem k tomu, ze u Perlu se ti muze po klavesnici projit kocka a je tu slusna sance, ze to bude neco znamenat...
Název: Re:Perl odmítá otevřít ovladač open s proměnnou
Přispěvatel: ntz_reloaded 17 Srpna 2012, 12:24:40
vsiml jsem si toho az ted a je to naprosto prisernej kod .. ukaz nam to prosim cele i s kontextem ..

zdravim, ntz