in reply to Making tmp copies of files

I'm not 100% what you want your script to do, but I'm pretty sure that copy ($figfile, "$1.tmp") doesn't do what you want.

In my quick-and-dirty version of your script (with paths for my localhost), copy ($figfile, "$1.tmp") copies "your_file.htm" to a file named ".tmp", instead of one named "your_file.htm.tmp". Is the latter what you want?

Edit: I should probably explain why. $1 does the following (from perldoc.perl.org):

The text matched by the used group most-recently closed (i.e. the group with the rightmost closing parenthesis) of the last successful search pattern.
In your foreach block, $1 is undef. I'm not 100% sure why, so maybe some of the senior monks can answer that question.

Also, I'll mention that you never chdir to $html_dir in your code, so your copy happens in whichever directory your script is running (which I'm guessing isn't where you keep your HTML files).

Finally, it's helpful to include the error message that you're getting when you run your code.

Here's your code, properly formatted with <code> tags. Also, those line numbers in your code aren't helpful here. Format your code and your questions better if you want quicker answers. The details are here: Writeup Formatting Tips.

#!/pw/prod/svr4/perl/bin/perl -w # ARGUMENTS: engine_figurelinks.pl xx_manual_vvv # where xx = manual code, vvv = version # # MODIFICATIONS: # #------------------------------------------------------ use warnings; use diagnostics; use Env qw(SERVER_NAME); use CGI qw(:standard :netscape); use File::Copy; new CGI; #------------------------------------------------------ ($manualdir_param) = @ARGV; $working_dir = $manualdir_param; $working_dir =~ s/manualdir=//i; $data_area = "/tmp"; $html_dir = "$data_area/$working_dir"; #------------------------------------------------------ # Loop to locate HTML files and make working tmp copies opendir( HTMLSTORIES, "$html_dir") || die "HTML files do not exist: $1 +"; @FigureArray = grep{/\.htm$/} readdir ( HTMLSTORIES ); foreach $figfile (@FigureArray) { copy ($figfile, "$1.tmp") or die "Can not make temporary copy of f +ile: $1"; } closedir HTMLSTORIES;

----------
Using perl 5.8.1-RC3 unless otherwise noted. Apache/1.3.33 (Darwin) unless otherwise noted. Mac OS X 10.3.9 unless otherwise noted.

Replies are listed 'Best First'.
Re^2: Making tmp copies of files
by xdbd063 (Friar) on Feb 21, 2006 at 18:53 UTC
    copy ("$html_dir/$figfile", "$html_dir/$figfile.tmp") or die "Can not make temporary copy of file: $1";
    You have no idea how much I appreciate your help. I
    made the suggested changes as you can see above, and
    get this error:

    Use of uninitialized value in concatenation (.) or
    string at ./engine_figurelinks.pl line 53 (#1)
    (W uninitialized) An undefined value was used as if it
    was a mistake. To suppress this warning assign a
    defined value to your variables.

    To help you figure out what was undefined, perl tells
    you what operation you used the dedefined value in.
    Note, however, that perl optimizes your progrm and the
    operation displayed in the warning may not necessarily
    appear literally in your program. For example, "that
    $foo" is usually optimized into "that" . $foo, and the
    warning will refer to the concatenation (.) operator,
    even though there is no . in your program.

    Uncaught exception from user code:
    HTML files do not exist: at ./engine_figurelinks.pl line 53
      This isn't going to work. $1 isn't defined as no capture has taken place.

      Try this.
      # For foo.htm => foo.htm.tmp opendir( HTMLSTORIES, "$html_dir") || die "HTML files do not exist: $! +"; @FigureArray = grep{/\.htm$/} readdir ( HTMLSTORIES ); foreach $figfile (@FigureArray) { copy ($figfile, "$figfile.tmp") or die "Can not make temporary cop +y of file [$figfile]: $!"; }
      BTW, make copies of the original before overwriting them. The last thing you want to do is blow them all away and realize you don't have backups.


      -Lee
      "To be civilized is to deny one's nature."
      This last problem turned out to be a system created
      problem. The files in /tmp are deleted on a time
      basis and all my files were gone. I just didn't
      realize it at first. IT WORKS!!!! Thank you very,
      very much!

      copy ("$html_dir/$figfile", "$html_dir/$figfile.tmp") or die "Can not make temporary copy of file: $1"; Isn't going to give you a meaningful error message, since as we pointed out earlier $1 is undef.

      IOW, your die message is going to look like: Can not make temporary copy of file: And you won't know which file the script died on.

      Try: copy ("$html_dir/$figfile", "$html_dir/$figfile.tmp") or die "Can not make temporary copy of file: $html_dir/$figfile\n";

      ----------
      Using perl 5.8.1-RC3 unless otherwise noted. Apache/1.3.33 (Darwin) unless otherwise noted. Mac OS X 10.3.9 unless otherwise noted.