in reply to Attempt to free unreferenced scalar in File::Copy (ActivePerl)

File::Copy is a pure perl module, so it's unlikely the direct source of the problem. I wonder if the error is really in Win32, an XS module. File::Copy uses Win32's CopyFile function.
  • Comment on Re: Attempt to free unreferenced scalar in File::Copy (ActivePerl)
  • Download Code

Replies are listed 'Best First'.
Re^2: Attempt to free unreferenced scalar in File::Copy (ActivePerl)
by EvanK (Chaplain) on Aug 15, 2006 at 18:55 UTC
    After reading your post, I tried directly calling Win32::CopyFile(), and it worked with no warning:
    use Win32; Win32::CopyFile( "$src_path/$upc/$realtracknum.mp3", "$dst_path/$upc/$realtracknum.mp3", 1 ) or warn "couldnt File::Copy $src_path/$upc/$realtracknum.mp3: $!";
    And the actual call to Win32::CopyFile() in File/Copy.pm (nested within a large, unwieldy if..else chain) uses the same syntax:
    return 0 unless @_ == 2; return Win32::CopyFile(@_, 1);
    So the problem seems to be with File/Copy.pm calling Win32::CopyFile(). Whatever that seems to indicate, though, I'm not quite sure.


    Addendum: I also tried passing an actual array, to see if that somehow pooched the XS code, but this still works without any warnings:

    my @copy_args = ( "$src_path/$upc/$realtracknum.mp3", "$dst_path/$upc/$realtracknum.mp3" ); Win32::CopyFile(@copy_args, 1) or warn "couldnt File::Copy $src_path/$upc/$realtracknum.mp3: $!";

    __________
    Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.
    - Terry Pratchett