#!/usr/local/bin/perl
use Fcntl qw(LOCK_EX LOCK_UN LOCK_NB);
# This opens a file in a lexcially scoped file handle, and flocks it.
# It will close and unlock when that variable goes out of scope.
sub fn {
my $fn = "FOO";
open my $F, ">$fn";
flock($F, LOCK_EX) or die "no lock";
return $fn;
}
# In this case, for some reason $F above isn't destroyed until after
# the for loop completes.
for my $fn (fn()) {
open my $G, $fn;
flock($G, LOCK_EX|LOCK_NB) or warn "no lock 2";
}
####
#!/usr/local/bin/perl
use Fcntl qw(LOCK_EX LOCK_UN LOCK_NB);
# This opens a file in a lexcially scoped file handle, and flocks it.
# It will close and unlock when that variable goes out of scope.
sub fn {
my $fn = "FOO";
open my $F, ">$fn";
flock($F, LOCK_EX) or die "no lock";
return $fn;
}
my $fn = fn();
for ($fn) {
open my $G, $fn;
flock($G, LOCK_EX|LOCK_NB) or warn "no lock 2";
}
# In this case, for some reason $F above isn't destroyed until after
# the for loop completes.
for my $fn (fn()) {
open my $G, $fn;
flock($G, LOCK_EX|LOCK_NB) or warn "no lock 3";
}
for (my $fn = fn()) {
open my $G, $fn;
flock($G, LOCK_EX|LOCK_NB) or warn "no lock 4";
}
while (my $fn = fn()) {
open my $G, $fn;
flock($G, LOCK_EX|LOCK_NB) or warn "no lock 5";
last;
}
open my $G, $fn;
flock($G, LOCK_EX|LOCK_NB) or warn "no lock 6";
####
sub FOO::DESTROY {print "DESTROYING FOO\n"}
sub fn {
my $fn = "FOO";
my $x = bless \$fn, "FOO";
return $x;
}
# In this case, for some reason $F above isn't destroyed until after
# the for loop completes.
for my $fn (fn()) {
print "I got $fn\n";
}