开发者

Perl: adding a string to $_ is producing strange results

I wrote a super simple script:

 #!/usr/bin/perl -w
 use strict;
 open (F, "<ids.txt") || die "fail: $!\n";
 my @ids = <F>;
 foreach my $string (@ids) {
 chomp($string);
 print "$string\n";
 }
 close F;

This is producing an expected output of all the contents of ids.txt:

hello

world

these

annoying

sourcecode

lines

Now I want to add a file-extension: .txt for every line. This line should do the trick:

 #!/usr/bin/perl -w
 use strict;
 open (F, "<id开发者_StackOverflow中文版s.txt") || die "fail: $!\n";
 my @ids = <F>;
 foreach my $string (@ids) {
 chomp($string);
 $string .= ".txt";
 print "$string\n";
 }
 close F;

But the result is as follows:

.txto

.txtd

.txte

.txtying

.txtcecode

Instead of appending ".txt" to my lines, the first 4 letters of my string will be replaced by ".txt" Since I want to check if some files exist, I need the full filename with extension.

I have tried to chop, chomp, to substitute (s/\n//), joins and whatever. But the result is still a replacement instead of an append.

Where is the mistake?


Chomp does not remove BOTH \r and \n if the file has DOS line endings and you are running on Linux/Unix.

What you are seeing is actually the original string, a carriage return, and the extension, which overwrites the first 4 characters on the display.

If the incoming file has DOS/Windows line endings you must remove both:

s/\R+$//


A useful debugging technique when you are not quite sure why your data is getting set to what it is is to dump it with Data::Dumper:

#!/usr/bin/perl -w
use strict;
use Data::Dumper ();
$Data::Dumper::Useqq = 1; # important to be able to actually see differences in whitespace, etc

open (F, "<ids.txt") || die "fail: $!\n";
my @ids = <F>;
foreach my $string (@ids) {
    chomp($string);
    print "$string\n";
    print Data::Dumper::Dumper( { 'string' => $string } );
}
close F;


have you tried this?

foreach my $string (@ids) {
  chomp($string);
  print $string.".txt\n";
}

I'm not sure what's wrong with your code though. these results are strange

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜