use XML::Twig; my $outfile = 'extra.snp'; open my $out,'>',$outfile or die "Could not open file '$outfile' $!"; my $file = shift @ARGV; #the file to parse my $twig = XML::Twig->new ( twig_handlers => { 'Rs' => \&rsId, 'Rs' => \&snpType, 'Rs' => \&snpClass, 'Rs/Sequence/Observed' => \&Observed, 'Rs/Sequence/Seq3' => \&Seq3, 'Rs/Sequence/Seq5' => \&Seq5, } ); $twig -> parsefile( "$file"); sub rsId { my ($twig, $elt) = @_; print $out $elt->att('rsId'), "\n"; } sub snpType { my ($twig, $elt) = @_; print $out $elt->att('snpType'), "\n"; } sub snpClass { my ($twig, $elt) = @_; print $out $elt->att('snpClass'), "\n"; } sub Observed { my ($twig, $elt) = @_; print $out $elt->text, "\t"; } sub Seq5 { my ($twig, $elt) = @_; print $out substr($elt->text, -30,30), "\t"; } sub Seq3 { my ($twig, $elt) = @_; print $out substr($elt->text, 0,30), "\t"; } #### 7179 ATAAGCAAATAACTGAAGTTTAATCAGTCTCCTCCCAGCAAGTGATATGCAACTGAGATTCC TTATGACACATCTGAACACTAGTGGATTTGCTTTGTAGTAGGAACAAGGTACATTCGCGGGATAAATGTGGCCAAGTTTT ATCTGCTGCCAGGGCTTTCAAATAGGTTGACCTGACAATGGGTCACCTCTGGGACTGA C/T AATTAGGAAGAGCTGGTACCTAAAATGAAAGATGCCCTTAAATTTCAGATTCACAATTTTTT TTTCTTAGTATAAGCATGTCCCATGTAATATCTGGGATATACTCATACCTTTAAAAATGTGCTCATTGTTTATCTGAAAT TCACATTTTAACAGGGAACCATTGTTTTGTTATTGTTTATTGTTTTGTTTCTAAATAA