Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: Need help in parsing an input

by Athanasius (Chancellor)
on Jan 17, 2013 at 11:49 UTC ( #1013764=note: print w/replies, xml ) Need Help??

in reply to Need help in parsing an input

Hello sandeepda, and welcome to the Monastery!

If I’ve understood your question correctly, the following script should give you an idea of how to proceed:

#! perl use Modern::Perl; my %ports; while (<DATA>) { next unless /^http/; my @records = split /\s+/; if (exists $ports{$records[2]}) { warn "Attempt to give port $records[2] a second name"; } else { $ports{$records[2]} = $records[0]; } } say join(' and ', get_listener_name($_)) for 6712, 4516; sub get_listener_name { my ($port_to_be_checked) = @_; my @results = ('FALSE', 'a1=null'); if (exists $ports{$port_to_be_checked}) { @results = ('TRUE', 'a1=' . $ports{$port_to_be_checked} . '(li +stener name)'); } return @results; } __DATA__ name ip port ------------------------------------ http-listener-1 * 6712 http-listener-2 * 8709


21:40 >perl TRUE and a1=http-listener-1(listener name) FALSE and a1=null 21:40 >

Hope that helps,

Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

Replies are listed 'Best First'.
Re^2: Need help in parsing an input
by sandeepda (Novice) on Jan 17, 2013 at 12:29 UTC
    Thanks Athanasius; I am trying it to make generic I am getting this output as array @outputarray also output is synamic the name and post can change How can i parse this where outputarray[0]=name ip port outputarray[0]=------------------------------------ outputarray[0]=http-listener-1 * 6712
    name ip port ------------------------------------ http-listener-1 * 6712 http-listener-2 * 8709

      Hello again sandeepda,

      I’m sorry, but I don’t understand what you are asking.

      The only thought that comes to mind is that you may be unfamiliar with Perl’s special DATA filehandle. But I used that only for convenience. If you already have the data in an array, you would adapt the opening of my script as follows:

      for (@existing_array) {

      On the other hand, if the data is in a file (named, say, “ports.dat”), then you would begin like this:

      my $file = 'ports.dat'; open(my $fh, '<', $file) or die "Cannot open '$file' for reading: $!"; while (<$fh>) {

      If this doesn’t answer your question, please explain what you are asking with your version of the code together with sample input and the output you want. See How do I post a question effectively?

      Hope that helps,

      Athanasius <°(((><contra mundum Iustus alius egestas vitae, eros Piratica,

        Sorry I am beginner in perl just starting hence if there are mistake please oblige. Here is the problem I am executing subroutine in perl script it returns me output dynamically in array format @outputArray
        outputarray[0]=name ip port outputarray[1]=------------------------------------ outputarray[2]=http-listener-1 * 6712 outputarray[3]=http-listener-2 * 4743
        I can also get the output array as like below also if i want
        outputarray[0]=http-listener-1 * 6712 outputarray[1]=http-listener-2 * 4743
        I want to write a subroutine which will check whether port exists and if exists returns me true and the listener name if not it returns me false and null getListenerName($porttobeChecked) This subroutine returns me the name of the listener if i pass a port. Eg: If $porttobechecked=6712 I want to return an array a[0]=TRUE and a1=http-listener-1(listener name) If port to be checked = 4516.I want to return an array a[0]=FALSE and a1=null .Help required

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1013764]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others taking refuge in the Monastery: (2)
As of 2018-07-18 16:48 GMT
Find Nodes?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?

    Results (393 votes). Check out past polls.