http://www.perlmonks.org?node_id=670925


in reply to The strangest use of unlink I know of

I thought it might be even more tricky still. Since %foo is empty, unlink gets an empty list. I thought that might mean that it would delete whatever is in $_ as if it got no argument, but that doesn't happen.

my $test_file = 'file_of_doom'; die 'file already exists' if -e $test_file; system( "touch $test_file" ); die 'file not created' if ! -e $test_file; $_ = $test_file; my %foo = (); unlink %foo; print "file gone!\n" if ! -e $test_file;

As it is, I think it just does nothing.

Replies are listed 'Best First'.
Re^2: The strangest use of unlink I know of
by Anonymous Monk on Feb 28, 2008 at 16:56 UTC
    Look more carefully. %foo is not empty. It was initialized with curly brackets -- almost ALWAYS a sign that the author made a mistake. Not a very humorous answer, but Wayne Jarvis is not paid to be funny.

    :|

    Still however -- the code indeed is a no op in terms of "useful" work. One needs to explicitly require %foo as a scalar:
    unlink scalar %foo;