[ Please do not top-post. Please remove any quoted text that is not relevant
to your post. ]
Angus wrote:
> From: Hans Meier (John Doe)
>>
>> Here is a way to process one lease { }
>> after another, with the possibility to extract every field you want.
>>
>> I think it is easy to read, understand, and alter.
>>
>> =====
>> #!/usr/bin/perl
>> use strict;
>> use warnings;
>>
>>
>> local $/="}\n"; # <<<<< look here!
>> while (my $record=<DATA>) {
>>
>> #print "*** $record ***"; # for debugging record extracting
>>
>> my ($lease)=$record=~/lease\s+(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
>> my ($binding_state)=$record=~/^\s+binding\s+state\s+(\w+)/m;
>> my ($client_hostname)=$record=~/^\s+client-hostname\s+"([\w.-_]+)"/m;
>>
>> print "lease '$lease' (host '$client_hostname') has ".
>> "binding state '$binding_state'\n";
>> }
>
> This script works really well but, I am a bit confused on what you are doing
> with this: local $/="}\n";
$/ is the Input Record Separator variable.
perldoc perlvar
> I have not seen local used much as I thought it
> was replaced by "my".
It has been for user defined variables however you still have to use local for
Perl's "special" variables like $/.
> It almost looks like you are defining the end of each
> lease entry with a closing curly brace and a new line. Does the dollar sign
> indicate that is the end of the input?
No, the dollar sign indicates that / is the name of a scalar variable.
> As for the regex matches the first two make sense to me but I am a bit
> confused on the third one
> my ($client_hostname)=$record=~/^\s+client-hostname\s+"([\w.-_]+)"/m
>
> I can see that we are creating a variable called $client_hostname which is
> defined by a match to $record which is feed in by the filehandle. I see
> that we are searching for a line starting with one or more spaces followed
> by client-hostname then one or more spaces followed by one word character
> and anything else but what does the -_ do?
The hythen (-) in a character class defines a range of characters unless it is
at the beginning or end of the character class so '.-_' is the range of
characters starting at '.' and ending at '_'. That is probably a mistake but
I would have to check the RFCs to confirm that. Hans probably meant '[\w._-]'
instead?
> And what does the m on the
> outside do?
The /m option means that ^ will match at the beginning of a line inside the
string in $record instead of at the beginning of $record.
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>