Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I am practice perl program write a program that works like mv, renaming the first command-line argument to second command-line argument considering to handle destination is a directory:
($old, $new) = @ARGV; if (-d $new) { ($basename = $old) =~ s#.*/##s; #what two s and three #mean ? $new .= "/$basename"; }
please help and thanks in advance!

Replies are listed 'Best First'.
Re: regular express problem
by davido (Cardinal) on Jun 16, 2004 at 18:32 UTC
    Is your question the text of the comment: "#what two s and three #mean?"?

    That's a substitution operator. Normally it would look like s/regexp/replace/. But you can use other delimiters if that makes the regexp easier to read. The reason that this particular regexp uses # instead of /, is because the re itself has an embeded / character in it, and the author chose an alternate delimiter instead of escaping the /.

    The trailing 's' tells the regexp engine that '\n' should be treated like any other character, and matched by the '.' metacharacter.

    That's the mechanics. Now for the implementation...

    That regexp will place into $basename whatever is left after removing as much text as possible before reaching the final '/' character. It's not really a foolproof solution toward getting at the basename of a file. A better solution is to use the File::Basename module like this:

    use File::Basename; my( $old, $new ) = @ARGV; if ( -d $new ) { $new .= "/" . basename( $old ); }


    Dave

Re: regular express problem
by sweetblood (Prior) on Jun 16, 2004 at 18:28 UTC
    The 1st 's' in your regexp is substitute, the last 's' treats the string as a single line. The '#' signs are delimiting the expression. I'd suggest you have a look at perlre and perlop

    HTH

    Sweetblood

Re: regular express problem
by dragonchild (Archbishop) on Jun 16, 2004 at 18:24 UTC
    Do your own homework. Your question is answered, if you read carefully, on p. 145 of Programming Perl, 3rd ed. (aka, the Camel book, because it has a camel on the cover.)

    ------
    We are the carpenters and bricklayers of the Information Age.

    Then there are Damian modules.... *sigh* ... that's not about being less-lazy -- that's about being on some really good drugs -- you know, there is no spoon. - flyingmoose

    I shouldn't have to say this, but any code, unless otherwise stated, is untested