in reply to Re: extract text from multi-line context
in thread extract text from multi-line context

my $raw = path( sample.vcd)->slurp_raw; my $re = qr{ \Q$dumpoff $end\E [\r\n ]+ (\#[\d]+) [\r\n ]+ \Q$dumpon $end\E [\r\n ]+ (.*?) \#[\d]+ }sx; while( $raw =~ m/$re/g ){ my( $id, $tidy ) = ( $1, $2 ); say $i; say $2; }

has following error, please help!!

Global symbol "$dumpoff" requires explicit package name at ./vcd2net.p +l line 8. Global symbol "$end" requires explicit package name at ./vcd2net.pl li +ne 8. Global symbol "$dumpon" requires explicit package name at ./vcd2net.pl + line 8. Global symbol "$end" requires explicit package name at ./vcd2net.pl li +ne 8. Global symbol "$i" requires explicit package name at ./vcd2net.pl line + 21. Bareword "sample" not allowed while "strict subs" in use at ./vcd2net. +pl line 7. Bareword "vcd" not allowed while "strict subs" in use at ./vcd2net.pl +line 7. Execution of ./vcd2net.pl aborted due to compilation errors (#1) (F) You've said "use strict" or "use strict vars", which indicates + that all variables must either be lexically scoped (using "my" or +"state"), declared beforehand using "our", or explicitly qualified to say which package the global variable is in (using "::").

Replies are listed 'Best First'.
Re^3: extract text from multi-line context
by Anonymous Monk on Aug 15, 2014 at 10:28 UTC

    has following error, please help!!

    *cough* thats what heppens when you edit in textbox late at night :)

    for the first part simply use what you had before  \$dumpoff \$end instead of "\Q\E"

    For the other part, $1 is not $i :)

    And the other part, you must quote your strings,

    add use diagnostics; to get more verbose explanations

      when I run the following code, Although no error , but nothing happen too, so sad!!

      #!/usr/bin/perl use strict; use diagnostics; use 5.010; use Path::Tiny qw/ path /; my $raw = path("sample.vcd")->slurp_raw; my $re = qr{ \$end \$dumpoff \$end [\r\n ]+ (\#[\d]+) [\r\n ]+ \$dumpon \$end [\r\n ]+ (.*?) \#[\d]+ }sx; while( $raw =~ m/$re/g ){ my( $id, $tidy ) = ( $1, $2 ); say $1; say $2; }

        ... so sad!!

        #!/usr/bin/perl -- use strict; use warnings; use Data::Dump qw/ dd /; use Path::Tiny qw/ path /; my $raw = path("sample.vcd")->slurp_raw; my $one = quotemeta '$end'; my $two = quotemeta '$dumpoff $end'; my $three = quotemeta '$dumpon $end'; my $nl = '[\r\n ]+'; my $re = qr{ $one $nl $two $nl (\#[\d]+) $nl # $1 id $three $nl (.*?) # $2 tidy \#[\d]+ }sx; dd( $re ); while( $raw =~ m/$re/g ){ my( $id, $tidy ) = ( $1, $2 ); dd( $id, $tidy ) ; } __END__ $ perl vcd-parse-1097529.pl qr/ \$end [\r\n ]+ \$dumpoff\ \$end [\r\n ]+ (\#[\d]+) [\r\n ]+ # $1 id \$dumpon\ \$end [\r\n ]+ (.*?) # $2 tidy \#[\d]+ /sx ( "#3537871350", "0&\r\n0%\r\n0\$\r\nb01 +\r\n0!\r\n0(\r\n0#\r\n1'\r\n0\"\r\nz)\r\nb1 +11 *\r\n", )