Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??
Just for the sake of TIMTOWTDI, here is an alternative approach that you could take to this task.
#!/usr/bin/perl -w use strict; chomp(my @lines = <DATA>); my %results; for my $line (@lines) { if (my ($field, $data) = $line =~ m/^(\w+).+?(<.+?>)$/) { $results{$field} = $data; } } for my $field (keys %results) { print "$field is $results{$field}\n"; } __DATA__ To:sanju <sip:san@36.212.176.07> From: paka<sip:sam@36.212.176.92> Contact: sanjay<sip:san@36.212.176.07:5060>
Which prints..
Contact is <sip:san@36.212.176.07:5060> To is <sip:san@36.212.176.07> From is <sip:sam@36.212.176.92>

The advantage of an approach such as this is that you do away with your if/else conditionals, so it becomes more scalable. For example, if you suddenly had to extract 100 sets of data instead of three, you wouldn't need to alter the code at all. But using your original approach, you'd need to add a separate conditional statement for each of the 100 possibilities.

Explaining the pattern match in that code...

($field, $data) = $line =~ m/^(\w+).+?(<.+?>)$/
  • match the beginning of the string , and then start capturing (  ^()
  • continue to capture as long as there are "word" characters (  \w)
  • assign whatever has been captuted to $field
  • match one or more of anything until we see a "<", and then start capturing again
  • match one or more of anything, and keep capturing until we see a ">"
  • assign this second capture to $data
  • match the end of the string (  $)

The anchors (^ and $) are probably not completely necessary in this case, however it's a good habit to anchor your pattern matches where ever possible, as it speeds things up.

Hope this helps,
Darren :)


In reply to Re: How to retrieve the string after the space??? by McDarren
in thread How to retrieve the string after the space??? by sam_0056

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others wandering the Monastery: (4)
As of 2024-04-25 16:01 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found