Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid

error in printing output of Data::Dumper to file

by prlusr (Initiate)
on Dec 10, 2012 at 06:30 UTC ( #1008056=perlquestion: print w/replies, xml ) Need Help??
prlusr has asked for the wisdom of the Perl Monks concerning the following question:

Hi All, I have a script, which reads nodes of an xml file. my code is as below
$xml = new XML::Simple; $data1 = $xml->XMLin("sample.xml"); print Dumper($data1);
# gives me the result i want but when i redirect this to a file
open FH5, ">>tagfile1" or die "error in reading..debug 1"; print FH5 Dumper($data1) or die $!;
it is not writing anything to file. Please help me if I am missing something .. Thanks .

Replies are listed 'Best First'.
Re: error in printing output of Data::Dumper to file
by moritz (Cardinal) on Dec 10, 2012 at 08:02 UTC
Re: error in printing output of Data::Dumper to file
by quester (Vicar) on Dec 10, 2012 at 07:19 UTC

    It works for me (perl 5.14.3, Fedora 17 Linux.) The script should die if there is a permission problem preventing you from creating or writing to the file, so... have you double checked that it actually reaches the open and print statements in your second snippet?

    It's often difficult to debug a script when only sections of it are posted; the bug is often a subtle interaction between the parts of the script that you are already suspicious of and the ones that are already known to be "correct."

      Yes, the code is reaching that point. When i am debugging the code it is giving me output like below
      C:\>perl -d Loading DB routines from version 1.3 Editor support available. Enter h or `h h' for help, or `perldoc perldebug' for more help. main::( my %myhash1 = (); DB<1> n main::( my %myhash2 = (); DB<1> main::( my $key; DB<1> main::( my $val; DB<1> main::( my $xml = new XML::Simple; DB<1> main::( my $data1 = $xml->XMLin("sample.xml"); DB<1> main::( my $data2 = $xml->XMLin("sample2.xml"); DB<1> main::( open FH5, ">>tagfile1" or die "error in readin +g..debug 1 "; DB<1> main::( print FH5 Dumper($data1) or die $!; DB<1> main::( while (<FH5>) main::( { DB<1> main::( close FH5;
      I am using perl v5.10.0 on windows.

        Oh. The file is being written to, but you can't read it because it was opened for append but not read (mode ">>" instead of "+>>"), and also because, due again to the append access, it is already positioned to the end of file when you do the first read.

        If you change the open mode from ">>" to "+>>", and insert   seek FH5, 0, 0 or die "Seek failed, $!"; just before  while (<FH5>) it should work.

        Another way would be to close FH5 and then reopen it for input (mode "<") just before trying to read it.

Re: error in printing output of Data::Dumper to file
by marquezc329 (Scribe) on Dec 10, 2012 at 07:40 UTC

    It worked for me also (Perl v5.16.2). It would be helpful if you could post some of the surrounding code.

    Lexical variables are preferred to bareword filehandles.

    open my $fh5, ">>", "tagfile1" or die "Error: $!\n";

    You may want to take a look at perldebtut and use the debugger to make sure your code is actually reaching the open / print statements as suggested by quester.

    And as always,

    use strict; use warnings;

      Thanks , it worked after I changed my file handler from bareword to my $FH5
Re: error in printing output of Data::Dumper to file
by frozenwithjoy (Priest) on Dec 10, 2012 at 07:59 UTC
    Is it creating a file (but not writing to it) or not even creating the file? Are you able to write non-Dumper output to the file?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1008056]
Approved by 2teez
[choroba]: My recent record is 10km in 1 hour :)
[perldigious]: Nice erix... perldigious' legs are so sore from portaging his kayak from place to place last weekend he can barely hobble 12m. :-)
[erix]: you're faster than me then :)
[erix]: well, at the moment, that is :)
[erix]: I should lose some weight although I keep telling myself that I'm doing extra training by lugging it along
[erix]: I saw a common kingfisher and a couple of bullfinches
[erix]: bullfinch ( a male and a female )
erix learned the word 'portaging' not so long ago (from vikings lugging their ships from one river-system to another)

How do I use this? | Other CB clients
Other Users?
Others exploiting the Monastery: (11)
As of 2017-05-24 12:46 GMT
Find Nodes?
    Voting Booth?