in reply to substr out of str error - but why?
In addition to what hv said, especially Use strict and warnings, do not parse XML with regular expressions (at least your input looks like it's XML). Since you didn't show your input (<REGION> tags) or the rest of your code (e.g. the %opposite hash), it's really hard to guess where the problem might be coming from, but it might be one of those two things.
use warnings; use strict; use XML::LibXML; my $xml = <<'EOT'; <root> <REGION seq_beg="1" pdb_beg="2" seq_end="3" pdb_end="4" type="1"/> <REGION seq_beg="5" pdb_beg="6" seq_end="7" pdb_end="8" type="2"/> <REGION seq_beg="9" pdb_beg="10" seq_end="11" pdb_end="12" type="3"/> </root> EOT my $topo_initial = "ABCDEFGHIJK"; my $side1 = "x"; my %opposite = ( x => "?" ); my $dom = XML::LibXML->load_xml(string => $xml); for my $node ($dom->findnodes('//REGION')) { my $offset = $node->{seq_beg} - 1; my $length = $node->{seq_end} - $node->{seq_beg} + 1; if ( $node->{type}==1 ) { substr($topo_initial, $offset, $length, ($side1 x $length) ); } elsif ( $node->{type}==2 ) { substr($topo_initial, $offset, $length, ($opposite{$side1} x $ +length) ); } else { substr($topo_initial, $offset, $length, ('U' x $length) ); } } use Test::More tests=>1; is $topo_initial, "xxxD???HUUU";
|
|---|