in reply to extract text from multi-line context

Well, your regex doesn't mention newlines :/)
your data has newlines
all that dumpoff stuff has newlines in between
its like whitespace :)
add that ( [\r\n ]+ ) to your pattern

And quotemeta

use Path::Tiny qw/ path /; my $raw = path( $file )->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 ); ... }

Replies are listed 'Best First'.
Re^2: extract text from multi-line context
by herman4016 (Acolyte) on Aug 15, 2014 at 10:12 UTC
    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 "::").

      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; }