http://qs1969.pair.com?node_id=288521


in reply to Run and/or download code directly from perlmonk nodes.

I *like* it!

A fellow Monk and I recently wrote a tool like this ourselves, but the in-memory eval() isn't a capability of our implementation. Anyway, I have a slight improvement to offer on your script. It concerns the mundane issue of where to save a file on disk. Your default /tmp would be fine on a single-user workstation but I thought about a multi-user system where security / privacy might be a greater concern, and one would want to confine one's activities to one's ~USER/ ($HOME) dir.

This small patch makes sure that such a directory exists before allowing the script to continue if writing to disk is going to be needed.

Here's the germane portion of what this change entails:

use File::Glob qw(:glob); use File::Spec qw(file_name_is_absolute catfile); # Configure this to an existing dir in your $HOME: my $home_space = ''; # /end user config. my ($HOME, $directory); if ($opt_m or $opt_M or $opt_f or $opt_F) { my $filename = $opt_f || $opt_F; die "Don't pass an absolute path!\n" if ($filename and File::Spec->file_name_is_absolute($filename)); $HOME = (bsd_glob('~'.$ENV{LOGNAME} , GLOB_TILDE | GLOB_MARK))[0]; $HOME = ($HOME =~s%/\Z%%) ? $HOME : ''; # Be kind to some Win32 users, comment this out: # die "No HOME found, no place to stash the code!\n" if not $HOME; # Directory to save fetched code in: $directory = $home_space ? File::Spec->catfile($HOME, $home_space) : $HOME; die "$directory does not exists.\n" if not -e $directory; }

Fun.

    Soren/Intrepid

-- 
Try my n.y.p.m.blue Perl Monks CSS Theme
(edit "On-Site CSS Markup" in your User Settings)