Newsgroup: it.comp.lang.perl
Titolo: Array

Ciao a tutti,
ho questo problema, sto leggendo un file XML con Simple e metto i dati in un
array, in questo modo:
for( @{$Installed->{Hotfix}} ) {
print "$_->{Hotfix_name}";
}
funziona, ma quando il mio file xml ha solo un valore mi dice
Not an ARRAY reference
come posso fare???
GRAZIE SIMONE

 wrote:

Direi che potresti risolvere usando il parametro ForceArray quando
leggi il file XML. Ti rimando alla documentazione di XML::Simple per
una spiegazione piu` dettagliata.
ciao,
S.

 S.
Questo č il mio file XML:
<Computer>
  <General_info>
    altro....
    <Installed_hotfixes>
      <Hotfix>
        <Hotfix_name>Q147222</Hotfix_name>
      </Hotfix>
      <Hotfix>
        <Hotfix_name>Q147222</Hotfix_name>
      </Hotfix>
    </Installed_hotfixes>
    altro....
  </General_info>
</Computer>
Se di hotfix ne ho piů di una me la legge, se ho una hotfix quindi:
    <Installed_hotfixes>
      <Hotfix>
        <Hotfix_name>Q147222</Hotfix_name>
      </Hotfix>
    </Installed_hotfixes>
Non riesce a leggere... e mi dice
for( @{$Hotfix=$Installed_hotfixes->{Hotfix}} ) {
print "$_->{Hotfix_name}";
}
Not an ARRAY reference at
Aiutatemi....

 Not an ARRAY reference at
Potresti farmi vedere anche come fai a leggere il file XML?
ciao,
S.

 S.
Questo è il mio script
$ARGV[0] || die "Non e' stato specificata la stringa da cercare\n\n";
use XML::Simple;
$file = "/netscript/data/$ARGV[0]";
my $Computer = XMLin($file);
my $General_info=$Computer->{General_info};
my $Installed_hotfixes=$General_info->{Installed_hotfixes};
my $Hotfix=$Installed_hotfixes->{Hotfix};
$dbh->do("DELETE FROM Hotfix WHERE Computer_name = '$ARGV[0]'");
for( @{$Hotfix=$Installed_hotfixes->{Hotfix}} ) {
print "$_->{Hotfix_name}\n";
}
e quando lo lancio mi dice
Not an ARRAY reference
GRAZIE SIMONE

 [...]
Quello che ti proponevo di fare nel mio precedente post era 
di modificare la chiamata a XMLin() nel seguente modo:
  XMLin( $file, ForceArray => 1 );
ciao,
S.

   XMLin( $file, ForceArray => 1 );
Allora, mentre provavo ho visto che con => 1 non funziona mentre con =>
['Hotfix'] Funziona!!!!!
grazie tante...
CIAOOO

 CIAOOO
Good. Buon divertimento :)
ciao,
S.
-- 
Stefano Rodighiero      |  
http://larsen.perlmonk.org
mailto:
lar...@perl.it
   |  
http://www.perl.it

Visto che sei cosě disponibile e gentile ti chiedo un'altra cosa:
io ho questo codice
$dbh->do("DELETE FROM Autorun_programs WHERE Computer_name = '$ARGV[0]'");
for( @{$Program=$Autorun_programs->{Program}} ) {
$dbh->do("INSERT INTO Autorun_programs (Computer_name, Command_line,
Start_from) VALUES ('$ARGV[0]','$_->{Command_line}','$_->{Start_from}')");
}
il mio file xml sotto command_line ha una cosa del genere: c:/pippo/pluto
quando vado a scrivere nel db nella colonna Command_line mi perdo le barre /
come posso fare?
GRAZIE

 come posso fare?
Usa i placeholder:
 
http://search.cpan.org/~timb/DBI-1.42/DBI.pm
  (paragrafo "Placeholders and Bind Values")


> Usa i placeholder:
$dbh->do("DELETE FROM Autorun_programs WHERE Computer_name = '$ARGV[0]'");
for( @{$Program=$Autorun_programs->{Program}} ) {
$dbh->do("INSERT INTO Autorun_programs (Computer_name, Command_line,
Start_from) VALUES ('$ARGV[0]','$_->{Command_line}','$_->{Start_from}')");
}
Come diventa con i placeholder??
SIMONE

 Come diventa con i placeholder??
No dai, facciamo cosi`: tu provi a vederti i placeholder sulla 
documentazione, provi a scrivere un po' di codice e quando ti
blocchi scrivi qui, allegando il codice che ti sta dando problemi.
Altrimenti ti squalificano :)


 blocchi scrivi qui, allegando il codice che ti sta dando problemi.
Sei stato anche troppo gentile, imho. <g>
Ciao,
-- 
+--------+ ASCII ribbon campaign ( )
|  kral  |  - against HTML email  X 
+--------+              & vCards / \

GRAZIE a tutti
SIMONE

 Altrimenti ti squalificano :)
Ho letto la documentazione dei placeholder e sono riuscito, grazie tante
Ti faccio un'altra domanda, quando vado a leggere dal file xml dei valori
nulli quando lo inserisco nel db mi compare
una cosa tipo questa: HASH(0x84c78a0) che significa???
GRAZIE
SIMONE