How can I ignore the block content reading in Perl.
        Posted  
        
            by Nano HE
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Nano HE
        
        
        
        Published on 2010-06-03T00:56:14Z
        Indexed on 
            2010/06/03
            1:14 UTC
        
        
        Read the original article
        Hit count: 243
        
Hello.
I plan to ignore the block content which include the start line of "MaterializeU4()" with the subroutin() read_block below. But failed. 
# Read a constant definition block from a file handle. 
# void return when there is no data left in the file. 
# Otherwise return an array ref containing lines to in the block.  
sub read_block { 
    my $fh = shift; 
    my @lines; 
    my $block_started = 0; 
    while( my $line = <$fh> ) { 
    # how to correct my code below? I don't need the 2nd block content.
 $block_started++ if ( ($line =~ /^(status)/) && (index($line, "MaterializeU4") != 0) ) ;
 if( $block_started ) { 
     last if $line =~ /^\s*$/; 
     push @lines, $line; 
 }
    } 
    return \@lines if @lines;
    return; 
} 
Data as below:
__DATA__ 
status DynTest = <dynamic 100>
vid = 10002
name = "DynTest"
units   = ""
status VIDNAME9000 = <U4 MaterializeU4()>
vid = 9000
name = "VIDNAME9000"
units = "degC"
status DynTest = <U1 100>
vid = 100
name = "Hello"
units   = ""
Output:
  <StatusVariables>
    <SVID logicalName="DynTest" type="L" value="100" vid="10002" name="DynTest" units=""></SVID>
    <SVID logicalName="VIDNAME9000" type="L" value="MaterializeU4()" vid="9000" name="VIDNAME9000" units="degC"></SVID>
    <SVID logicalName="DynTest" type="L" value="100" vid="100" name="Hello" units=""></SVID>
  </StatusVariables>
[Updated]
I print the value of index($line, "MaterializeU4"), it output 25.
Then I updated the code as below
$block_started++ if ( ($line =~ /^(status)/) && (index($line, "MaterializeU4") != 25)
Now it works.
Any comments are welcome about my practice.
Thank you.
© Stack Overflow or respective owner