On 8/28/07, Dharshana Eswaran <[EMAIL PROTECTED]> wrote:
> Hi All,
>
> I have a pattern, which reads as shown below:
>
> my $comment = qr{\s* (?:/\* .*? \*/ \s*)*}xs;
> my $identifier = qr{ [A-Za-z_]\w* }xs;
> my $statement = qr{
> \s*
> ($identifier)
> \s+
> ($identifier)
> \s*
> (?: \[ (.*?) \] )?
> \s*
> ;
> \s*
> $comment?
> }xs;
>
> my @m = $abc =~ /$statement/g;
>
> My string reads as shown below:
>
> $abc = "typedef struct _MSG_S
> {
> CALL_ID callId; /**< call id */
> VOICE_STATUS status; /**< Call status */
> id_t id; /**< The id of process call */
> } TAPI_VOICE_NOTIFY_CALL_STATUS_MSG_S;";
>
>
> The condition $abc =~ /$statement/g; is not satisfied. The array @m is not
> being filled.
>
> I am unable to find out the mistake. Is the pattern regex wrong somewhere?
>
> Thanks and Regards,
> Dharshana
>
That is not the behaviour I am seeing. Please post a full example
that demonstrates your problem. The following code prints out:
callId is of type CALL_ID
status is of type VOICE_STATUS
id is of type id_t
as expected.
#!/usr/bin/perl
use strict;
use warnings;
my $comment = qr{\s* (?:/\* .*? \*/ \s*)*}xs;
my $identifier = qr{ [A-Za-z_]\w* }xs;
my $statement = qr{
\s*
($identifier)
\s+
($identifier)
\s*
(?: \[ (.*?) \] )?
\s*
;
\s*
$comment?
}xs;
my $abc = "typedef struct _MSG_S
{
CALL_ID callId; /**< call id */
VOICE_STATUS status; /**< Call status */
id_t id; /**< The id of process call */
} TAPI_VOICE_NOTIFY_CALL_STATUS_MSG_S;";
while ($abc =~ /$statement/g) {
my ($type, $name, $size) = ($1, $2, $3);
$type = "array of $type with $size elements" if defined $size;
print "$name is of type $type\n";
}
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/