Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw
 
PerlMonks  

Re: Check exist of anonymous subroutine before calling it within regexp substitute?

by kyle (Abbot)
on Oct 29, 2009 at 02:03 UTC ( #803851=note: print w/replies, xml ) Need Help??


in reply to Check exist of anonymous subroutine before calling it within regexp substitute?

If it were my code, I'd probably write it the way moritz has it, but if you're extra paranoid, you might do something like this:

($out_message = $log_format) =~ s{%(.)}{ my $m = $meta_char{$1}; (ref sub {} eq ref $m) ? $m->() : $1 }ge;

That will withstand missing elements as well as elements that exist but don't have a code reference in them.

  • Comment on Re: Check exist of anonymous subroutine before calling it within regexp substitute?
  • Download Code

Replies are listed 'Best First'.
Re^2: Check exist of anonymous subroutine before calling it within regexp substitute?
by jffry (Hermit) on Oct 29, 2009 at 17:25 UTC

    Minor tangent...

    You swapped out the regexp delimiters from slashes to curly braces, but to me, this seems harder to read. I can only conclude that you think the curly braces improve readability. I'm guessing when you read the code, your mind's parser is thinking, "a block is a block so I expect curly braces" or something like that?

      I often write s/// replacements (and m// matches) with braces, mostly because I don't have to escape slashes, and I don't even have to escape braces as long as they're nested. It's not unusual that I want to match a string with a slash in it (usually a file path), so I find using any "not slash" as delimiters useful.

      That said, I don't make a habit of changing delimiters in existing code. I probably would have stayed with slashes in my reply here if not for the /e flag. Since the replacement is being executed as a code block, I think it's good to make it look like a code block.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://803851]
help
Chatterbox?
[Discipulus]: oh the thread is going on while I was reading the history of a left-handed pitcher.. finding no cue..
[karlgoethebier]: Discipulus: Jenda waits for his rapture? Ja, ja..
[karlgoethebier]: is waiting for his magic carpet...
[karlgoethebier]: ...but it doesn't come
[Discipulus]: I referring also to support denmark one, no the enoch one (Roma is in champion league anyway ;=)
[Discipulus]: anyway me too i wonder if your sig is appropriate: sigs remain while CB is volatile: for example i have even more problem with hungary president..
[erix]: cbstream is down?

How do I use this? | Other CB clients
Other Users?
Others drinking their drinks and smoking their pipes about the Monastery: (7)
As of 2017-06-22 11:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    How many monitors do you use while coding?















    Results (519 votes). Check out past polls.