Beefy Boxes and Bandwidth Generously Provided by pair Networks
Pathologically Eclectic Rubbish Lister
 
PerlMonks  

Re: Re: Perl cheat sheet

by Juerd (Abbot)
on Nov 29, 2002 at 23:19 UTC ( [id://216611]=note: print w/replies, xml ) Need Help??


in reply to Re: Perl cheat sheet
in thread Perl cheat sheet

* The regex metacharacter ^ means "start of string", not "start of line" (unless the /m modifier is used) * The regex metacharacter $ means "end of string", not "end of line" (unless the /m modifier is used)

Because "foo\n" =~ /foo$/, I tend to explain it differently. ^ and $ are begin and end of a line, but /m modifies the meaning of line. $ certainly is not end of string when the string ends in \n. I'm not sure if and how I want to change the sheet.

* . is "any char except \n" or just "not \n" (unless the /s modifier is used)

Good point, will be changed.

regex \A, \Z and \z

Maybe if I need to fill some room in a future version, but I kind of wanted to keep it simple. I also didn't include \G, \X, \C, \b, \B. I think I'd add \b and \C first.

* Another commonly ignored "NEVER" is: /$userinput/

Good one, but I'd need another line :). Will remember it for a future version, though. Update - Added valdez' link suggestion and a use Modules; et voila: a line to put /$userinput/ on!

Thanks for your input!

- Yes, I reinvent wheels.
- Spam: Visit eurotraQ.

Replies are listed 'Best First'.
Re: Re: Re: Perl cheat sheet
by TheDamian (Vicar) on Dec 02, 2002 at 01:33 UTC
    Because "foo\n" =~ /foo$/, I tend to explain it differently. ^ and $ are begin and end of a line, but /m modifies the meaning of "line".

    I don't see how that explanation can work, though. $ only ever means EOL when /m is operative. You can see that by running:

    "foo\nbar" =~ /foo$/ or print "Didn't match EOL :-(\n";

    I see that you've updated the sheet to just:

    ^ begin $ end (before \n)
    Can I suggest that (if you also used the suggestion at the end of this node) that could just become:
    ^ start of str $ end of str (incl \n)
    Those descriptions would be sufficient if you were also more explicit about /s and /m. Explaining that they mean singleline and multiline respectively doesn't really help newbies remember which is which or what each of them does. Heck, if uri hadn't taught me the mnemonic that /s changes a Single metacharacter (i.e. .) whilst /m changes Multiple metacharacters (i.e. ^ and $), then I still wouldn't be able to remember which is which myself!

    So maybe you'd like to consider changing them to something like:

    /m ^ = SOL, $ = EOL /s . matches \n too

      (Sorry, no quote, as I have currently no way of performing a copy/paste)

      I'll be so glad when Perl 6 arrives. While ^ usually isn't a problem, explaining $ can be tough. Maybe my "line" explanation wasn't clear.

      This is how I have always seen ^ and $:
      Without /m
      ^ matches the null-string at the beginning of a line;
      $ matches the null-string at the end of the line, just before \n, if present;
      The string has only one line, \n characters are ignored if they're not followed by \z.
      With /m
      ^ matches the null-string at the beginning of a line;
      $ matches the null-string at the end of the line, just before \n, if present;
      The string has multiple lines, each line begins after \A or \n, and ends before \n or \z.

      But you are probably correct in that this is a strange way of making things clear.

      I did remove "line" to avoid confusion. I think that "end of string" is a not a good explanation of $, unless /m is explained in more detail. Your new suggestion (mentioning what /s and /m do instead of what the modifiers stand for) helps. I hope it fits in the limited space. Update: it does :)

      If I were to explain it using regexes, I'd say $ is /m ? (?=\n|\z) : (?=\n?\z) and that ^ is /m ? (?:(?<=\A)|(?:<=\n)) : \A. I doubt that helps much for a cheat sheet, though :) (note: untested)

      Thanks again.

      - Yes, I reinvent wheels.
      - Spam: Visit eurotraQ.
      

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://216611]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others chilling in the Monastery: (5)
As of 2024-03-29 13:08 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found