jesuashok has asked for the wisdom of the Perl Monks concerning the following question:
I have encountered a situation where the output of Data::Dumper cannot be incorporated in a script to restore the original data, specifically where a string contains the sequence ^M^J and $Useqq is unset. (Note: this arises in my work because I have packed numbers in a large data structure, and on a few occasions the packed sequence happens to include ^M^J as a subsequence.)
The issue arises because perl seems to have a "friendly" way to handle DOS files on Unix platforms. My guess is that at a really early stage of reading the script file, ^M^J is translated to ^J, presumably before perl is even parsing the input. Obviously, it is ignoring the single quotes in this example, since the single quotes should suppress any interpretation of the input. (Note that I realize this is generally a desirable behaviour, so I think the bug is with Data::Dumper, not with how files are read.)
Note also that, as my script shows, this is not a problem when we use eval on the output of dump, but only when the code is saved to a file a compiled back from the file. (Unfortunately for me, I wish to save the dump to a file for frequent reuse, so that doesn't help me much...)
Out put is as follows :-use Data::Dumper; $Data::Dumper::Purity = 1; # This makes no difference my $a = "\x0d\x0a"; print "Initial length: ", length($a), "\n"; my $dump = Data::Dumper->Dump([$a], [qw(a)]); print "Dumped code with Useqq = 0:\n", $dump; eval $dump; print "New length after eval: ", length($a), "\n"; $Data::Dumper::Useqq = 1; $dump = Data::Dumper->Dump([$a], [qw(a)]); print "Dumped code with Useqq = 1:\n", $dump; eval $dump; print "New length after eval: ", length($a), "\n";
what is the problem when $Useqq = 0. It seems, that does not work as expected.Initial length: 2 Dumped code with Useqq = 0: $a = ' '; New length after eval: 2 Dumped code with Useqq = 1: $a = "\r\n"; New length after eval: 2
your thoughts on the same.
2006-10-16 Unapproved by planetscape once evidence of habitual plagiarism uncovered.