lightoverhead has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks:

I just test some code for creating a temp dir using File::Temp.

I would like the created temp dir will be automatically removed after the program running.

When I used the function way to make a temp dir, the created temp dir will not be removed after the program running even if I set the "CLEANUP=>1".

However, if I used object way to make the temp dir, the temp dir will be removed after program running.

the code is as below

use File::Temp qw/tempfile tempdir/; my $template = "testtempfileXXXX"; #my $dir = tempdir(CLEANIP=>1); #won't remove temp dir after runni +ng my $dir = File::Temp->newdir(); #will remove temp dir after runnin +g my ($fh,$path) = tempfile($template, SUFFIX=>".data", UNLINK=>1, DI +R=>$dir); print "the path is: $path\nthe dir is: $dir\n";

Does anyone have any insight into this?

Thank you.

Replies are listed 'Best First'.
Re: weird behavior of creating a temp dir by File::Temp
by toolic (Bishop) on May 05, 2014 at 20:43 UTC
    File::Temp does not use CLEANIP, but it does use CLEANUP. Change:
    my $dir = tempdir(CLEANIP=>1);

    to:

    my $dir = tempdir(CLEANUP=>1);
      That's funny, but it's exactly the kind of bug that's hard to spot in your own code... I'm sure the OP's brain saw that as "CLEANUP" every time.

      Sounds like an argument for Method::Signatures:

      #!/usr/bin/perl use strict; use warnings; use Method::Signatures; func foo(:$CLEANUP) { print "I will".($CLEANUP?"":" not")." clean up\n"; } foo(CLEANIP => 1);
      results in
      $ perl testSignatures.pl 
      In call to main::foo(), does not take CLEANIP as named argument(s) at testSignatures.pl line 13.
      

      Mike

      Thank you guys

      It's such a stupid bug!

      As Mike said, in my eyes, it was always "CLEANUP". Maybe my brain was short-circuited somehow.