Works for me:
$ perl -MFile::Basename -le '$f="data/myfile.soft";$b=basename($f,".so
+ft"); print $b'
# output:
myfile
(macosx 10.5.3, perl 5.8.8 built for darwin-thread-multi-2level)
When I first saw your post, I noticed the "i" in "File::Basename" was in upper case -- it appears you fixed that in the post, but if it is not fixed in the script, perl would be able to "locate" the module file (because macosx can still ignore case when looking up paths), but perhaps perl would not be able to match the module name in the script to the path name (because of I vs. i).