On Nov 15, Kiko Uehara said: >--------- > BlockA > color 0 0 0 > rcolor 1 1 1 > dcolor 2 2 2 > > BloackB > color 0 0 0 > rcolor 1 1 1 > dcolor 2 2 2 >---------
> BlockA rcolor "1 1 1" to "4 4 4" > BlockB rcolor "1 1 1" to "0 0 0". > >I have variables like $BlockA_rcolor = "rcolor 4 4 4". I would suggest a hash instead: $change{BlockA}{rcolor} = "4 4 4"; $change{BlockB}{rcolor} = "0 0 0"; or: %change = ( BlockA => { rcolor => "4 4 4", # other ones }, BlockB => { rcolor => "0 0 0", # other ones }, # other blocks ); >while (<IN>) >{ > if ( $_ =~ m/rcolor/ ) { > $_ = $BlockA_rcolor; > } > print $_; >} I'd suggest keeping track of what block you're in, and what "attribute" is on the line: BLOCK: while (<IN>) { # skip blank lines print, next if /^\s*$/; # otherwise extract the block name my ($block) = /^(\S+)/; # print the line print; # process the block's contents while (<IN>) { # restart the OUTER while loop if we're done with this block redo BLOCK unless /^\s+(\S+)/; # store the attribute my $attr = $1; # if this block has things to be modified, # and this attribute is one of them, change it if ($change{$block} and exists $change{$block}{$attr}) { s/\Q$attr\E.*/$attr $change{$block}{$attr}/; } # print the attribute print; } } Let me know if you understand it, or if you need more explanation. -- Jeff "japhy" Pinyan [EMAIL PROTECTED] http://www.pobox.com/~japhy/ RPI Acacia brother #734 http://www.perlmonks.org/ http://www.cpan.org/ <stu> what does y/// stand for? <tenderpuss> why, yansliterate of course. [ I'm looking for programming work. If you like my work, let me know. ] -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]