Thread Verarbeitung der Daten aus einer XML-Datei (4 answers)
Opened by maio at 2007-11-09 14:39

renee
 2007-11-09 14:49
#102120 #102120
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Du versuchst, aus dem String "hallo" ein Array @hallo zu bekommen. So etwas nennt man symbolische Referenz. Dazu am besten mal diesen Wiki:Artikel lesen...

strict erlaubt solche symbolischen Referenzen nicht. Deswegen läuft das Programm unter strict nicht. Du hast zwei Möglichkeiten, wie Du es auch unter strict zum Laufen bringst:

1) Du überprüfst erst, ob Du überhaupt eine Arrayreferenz vorliegen hast:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#!/usr/bin/perl

use strict;
use warnings;
use XML::Simple;

my $xml = XML::Simple->new;
my $hashref = $xml->XMLin('test.xml');

foreach my $key (keys %$hashref) {
        if ( ref($hashref->{$key}) eq 'ARRAY' and @{$hashref->{$key}} > 0) {
                my @tmp = @{$hashref->{$key}};
          foreach my $value (@tmp) {
                        print $key." => ".$value."\n";
                }
        } else {
          print $key." => ".$hashref->{$key}."\n";
        }
}


2) Du zwingst CPAN:XML::Simple dazu, *immer* eine Arrayreferenz zu verwenden:

Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;
use XML::Simple;

my $xml = XML::Simple->new;
my $hashref = $xml->XMLin('test.xml', force_array => 1);

foreach my $key (keys %$hashref) {
        if ( @{$hashref->{$key}} > 0) {
                my @tmp = @{$hashref->{$key}};
          foreach my $value (@tmp) {
                        print $key." => ".$value."\n";
                }
        }
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/

View full thread Verarbeitung der Daten aus einer XML-Datei