So i was tracking down a bug in a module i wrote (which ended up being a non-closed file handle) and i noticed this. Take the following code:
#!/usr/bin/perl -wT
use strict;
sub foo {
open(FOO, '>/tmp/foo') or die "$!\n";
print FOO "this is a test\n";
}
sub bar {
open (BAR, '/tmp/foo') or die "$!\n";
while (<BAR>) {
print;
}
}
foo();
bar();
This code produces no output untill i add a
close FOO; in
&foo. However, the following code does work:
#!/usr/bin/perl -Tw
use strict;
sub foo {
open(FOO, '/tmp/foo') or die "$!\n";
while (<FOO>) {
print;
}
}
sub bar {
open (BAR, '/tmp/foo') or die "$!\n";
while (<BAR>) {
print;
}
}
foo();
bar();
So what's going on here? Why can't I open the same file with two different modes when I can open the same file in the same mode? And why doesn't the second
open barf? I tried this in linux under both 5.00053 and 5.6 and got the same results.
BlueLines
Disclaimer:
This post may contain inaccurate information, be habit forming, cause atomic warfare between peaceful countries, speed up male pattern baldness, interfere with your cable reception, exile you from certain third world countries, ruin your marriage, and generally spoil your day. No batteries included, no strings attached, your mileage may vary.