• Advertisement
Sign in to follow this  

perl file function

This topic is 1780 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

my ($bumpFileVolume,$bumpFileDir,$name) = File::Spec->splitpath($bumpFile);
my @workDirArr = ($bumpFileVolume,$bumpFileDir);
my $workDir = File::Spec->catdir(@workDirArr);
chdir $workDir or die "$0 failed to chdir to working dir $workDir";

system ("sort -k 1,1 -k 4n -T $workDir $name >tempLoc_$name")==0 or die "$0 failed to sort $name";
open (BRK, "tempLoc_$name") or die "$0 failed to open file tempLoc_$name";
open (OUTTWO, ">loc_analyze_$name") or die "$0 failed to open file loc_analyze_$name";


 

 

I'm a little confused as to whats happening here. What does it mean to create the variable $name attach it to the file I assume is $bumpfile and then use in as the part of loc_analyze_$name? Are they creating a new file or simply opening up an old one?

Share this post


Link to post
Share on other sites
Advertisement

Documentation says:
 

splitpath
 

Splits a path in to volume, directory, and filename portions. On systems with no concept of volume, returns '' for volume.

  1. ($volume,$directories,$file) = File::Spec->splitpath( $path );
  2. ($volume,$directories,$file) = File::Spec->splitpath( $path, $no_file );

For systems with no syntax differentiating filenames from directories, assumes that the last file is a path unless $no_file is true or a
trailing separator or /. or /.. is present. On Unix, this means that $no_file true makes this return ( '', $path, '' ).


The directory portion may or may not be returned with a trailing '/'.


The results can be passed to catpath() to get back a path equivalent to (usually identical to) the original path.

 

So splitpath returns a tuple and the third element of the tuple is just the filename, as opposed to the entire file path. Presumably bumpFile contains the full path of the file not just a filename. They're basically just trying to change the working directory and to work no matter what was stored in bumpfile (i.e. an entire path, a file, a relative file path, etc). The code will work if you pass in "../../twizzlers.txt" or "./twizzlers.txt" and maybe just "twizzlers.txt".

 

The system command creates a new file which is based on just the filename from bumpFile. So if bumpFile contains "../../twizzlers.txt" then the system command creates the file tempLoc_twizzlers.txt in the same folder that twizzlers.txt exists in.

 

Then the perl script opens the already existing tempLoc_twizzlers.txt file (I *think* for read-only purposes seems to be the default when not specified) and then it opens the file loc_analyzer_twizzlers.txt for writing.

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement