Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
Home
Discussion Groups
General
GeneralPortable MacsHardwareNetworking
Applications
Mac ApplicationsEudoraFirefox / MozillaInternet ExplorerOutlook ExpressMS OfficeEntourageExcelPowerPointWordVirtual PCMedia PlayerOther MS Products
Programming
Mac ProgrammingCodeWarriorPerl
Country Specific
Australian Mac GroupUK Mac Group

Mac Forum / Programming / Perl / September 2007



Tip: Looking for answers? Try searching our database.

File::Path rmtree portability (works on OS X, fails on WinXP)

Thread view: 
Enable EMail Alerts  Start New Thread
Thread rating: 
Jim - 28 Sep 2007 23:52 GMT
I have a bit of a curiosity here with a script I've been working on  
and am hoping that some others may have experienced and found a  
solution to a similar script portability issue.

The script in question is intended to run on OS X Perl and WinXP  
ActiveState PERL.
It seems simple enough

1) test if a directory exists
2) if so, remove it.

The $buildDir variable is set based upon which OS the script is  
running on.

For example:

# define build dir path
if ($runOS eq "win"){
    $buildDir = "\\\\.PSF\\builds\\$version";
} else {
    $buildDir = "/builds/$version";
}

# test for dir and remove if it exists
if ( -d $buildDir) {
           # using File::Path here for directory removal
            use File::Path;
            rmtree $buildDir,1,0;
}

Everything works as expected on OS X, but on WinXP, rmtree seems to  
fail with the following error...

    Can't call method "rmtree" without a package or object reference

The rmtree method is the only place I seem to have trouble in my script.

Many other operations in the script that use the $buildDir variable  
to copy files into the build directory, or move it around, etc work  
both on OS X and WinXP.

I'm sure I can work around the problem by just using system(rm -r  
$buildDir) and system(del /S $buildDir) ... but I'd like to figure  
out if I'm actually doing something wrong with File::Path's rmtree or  
if the issue is more because of ActiveState PERL+Windows.

Any ideas out there?

Thanks in advance!

-jim-

-------------------------------------------------------------------
"I gave you five of the best beers of my life...and what did you do?
You drank the sixth one too!"

4ABC 177B 8352 2D6B 1E10  DAE5 7865 34D5 3139 5D2D
Ken Williams - 29 Sep 2007 04:05 GMT
> # define build dir path
> if ($runOS eq "win"){
[quoted text clipped - 14 lines]
>
>     Can't call method "rmtree" without a package or object reference

The problem is because of a different version of perl, not rmtree()  
itself.  One version of perl is interpreting your code as

   $buildDir->rmtree, 1, 0;

and the other as you intended:

   rmtree( $buildDir, 1, 0 );

If you add the parens explicitly, the problem should go away.

 -Ken
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.