SPUG: regular expression difficulty, plus compiled perl

Christopher Wilkins chris at pws.net
Tue Mar 28 12:20:59 CST 2000


Try this:

print "\$0 = '$0'\n";
my ($dir) = ($0 =~ m#^(.*)(\\|/)#);
print "dir = '$dir'\n";

The regular expression works for both *nix and windows ("\" vs "/"). By 
using the $0 variable, you are going to only get the full directory if the 
script was called with a full pathname.

Chris

At 09:24 AM 3/28/00 -0800, you wrote:
>Yes, dirname() is what I was looking for, just overlooked it in the cookbook
>-- thank you!
>
>Thanks to the academy and everyone who contributed...oh wait, wrong speech.
>
>But I'm still interested to know how I would parse the same info out of a
>variable containing "c:\dir1\subdir1\subdir2\my.exe", basically how to trim
>the filename off the end.
>
>About the other solutions...
>
>SOLUTION 1:
>=================================
>$test1 =~ s#.*\\##;    # replace everything
>                        # before the last \
>                        # with nothing...
>=================================
>This is the exact opposite of what I wanted to do, if you test the code it
>actually ends up with $test1 = "";
>
>SOLUTION 2:
>=================================
>split(/\\/,$0);
>pop @_;
>$test1 = join "\\", at _;
>=================================
>This assumes my path is only one directory deep, not going to work.
>
>
>
>-----Original Message-----
>From: Skahan, Vince [mailto:Vince.Skahan at pss.boeing.com]
>Sent: Tuesday, March 28, 2000 7:19 AM
>To: 'spug-list at pm.org'; 'Todd Wells'
>Subject: RE: SPUG: regular expression difficulty, plus compiled perl
>
>
>
>
>I'd use dirname() rather than roll my own. Any reason why doing it the
>unix way doesn't suffice ?
>
>The following worked for me on my NT system using ActiveState
>perl build 522...
>
>         #!perl
>         #
>         # see page 328 of the PerlCookbook
>         #
>         use File::Basename;
>         $dir=dirname($0);
>         print "I'm called $0\n";
>         print "I live in $dir\n";
>
>When I save the script as c:\tmp\foo.pl and run it, it reports back
>output that looks like:
>
>         I'm called C:\TMP\foo.pl
>         I live in C:\TMP
>
>--
>-------- Vince.Skahan at boeing.com ------ http://bcstec.ca.boeing.com/~vds/
>-------------
>                  Boeing Shared Services Group - Technical Services
>                     outside Boeing - http://www.halcyon.com/vince
>
>
> > ----------
> > From:         Todd Wells[SMTP:toddw at wrq.com]
> > Sent:         Monday, March 27, 2000 8:20 PM
> > To:   'spug-list at pm.org'
> > Subject:      SPUG: regular expression difficulty, plus compiled perl
> >
> > I'm using ActiveState Perl on NT4 and trying to set a variable to be equal
> > to the directory name that the script was ran in.
> >
> > So, I look at $0 which contains the name of the script I ran... in this
>case
> > "D:\PERL\COUNTP~1.PL"
> >
> > But when I try to strip the filename off the end, I can't seem to do it.
> >
> > print "First: $0\n";
> > ($test1 = $0)=~ m#.*\\#;
> > #$test1 =~ s/(.*\\)/$1/;      # I tried this too, and it didn't work
> > either.
> > print "Second: $test1\n";
> >
> > The output:
> > First: D:\PERL\COUNTP~1.PL
> > Second: D:\PERL\COUNTP~1.PL
> >
> > What's going on here?  Is the .* just being _really_ greedy?  I'm
>expecting
> > $test1 to be "D:\PERL\"
> > I know this is silly, but I can't figure out the problem here.
> >
> > BTW, someone at the last SPUG meeting mentioned they were playing around
> > with compiled Perl using ActiveState.  I can't seem to find any specifics
>on
> > how to do this.  Perlfaq3 mentions it, but gives no specifics on how to
> > actually do it, nor can I find any at Malcolm Beattie's site.
> >
> > - Todd
> >
> >  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
> >      POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
> >  Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
> >  SUBSCRIBE/UNSUBSCRIBE: Replace "action" below by subscribe or unsubscribe
> >            Email to majordomo at pm.org: "action" spug-list your_address
> >
> >
>
>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>      POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
>  Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
>  SUBSCRIBE/UNSUBSCRIBE: Replace "action" below by subscribe or unsubscribe
>            Email to majordomo at pm.org: "action" spug-list your_address
>
>
>  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
>      POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
>  Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
>  SUBSCRIBE/UNSUBSCRIBE: Replace "action" below by subscribe or unsubscribe
>            Email to majordomo at pm.org: "action" spug-list your_address


 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
 Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/
 SUBSCRIBE/UNSUBSCRIBE: Replace "action" below by subscribe or unsubscribe
           Email to majordomo at pm.org: "action" spug-list your_address





More information about the spug-list mailing list