#!/usr/bin/perl use strict; use warnings; use Benchmark; timethese(100000 => { normal => sub { open my $in, "< molpro.out" or die "geht nicht\n"; my ($r1,$r2,$r3) = (1,1,0); while (<$in>){ if (($r1) && (/^\s*?!MCSCF STATE (\d+).1 ENERGY/)){my $x = $1} if (($r2) && (/^\s*?SA-MC GRADIENT FOR STATE (\d+).1/)){my $x = $1} if (($r3) && (/^\s*?SA-MC NACME FOR STATES (\d+).1 - (\d+).1/)){my $x = $1} } }, mit_qr => sub { open my $in, "< molpro.out" or die "geht nicht\n"; my ($r1,$r2,$r3) = (1,1,0); my $re1 = qr/^\s*?!MCSCF STATE (\d+).1 ENERGY/; my $re2 = qr/^\s*?SA-MC GRADIENT FOR STATE (\d+).1/; my $re3 = qr/^\s*?SA-MC NACME FOR STATES (\d+).1 - (\d+).1/; while (<$in>){ if (($r1) && (/$re1/)){my $x = $1} if (($r2) && (/$re2/)){my $x = $1} if (($r3) && (/$re3/)){my $x = $1} } }, extra => sub { my ($r1,$r2,$r3) = (1,1,0); my $re1 = qr/^\s*?!MCSCF STATE (\d+).1 ENERGY/; my $re2 = qr/^\s*?SA-MC GRADIENT FOR STATE (\d+).1/; my $re3 = qr/^\s*?SA-MC NACME FOR STATES (\d+).1 - (\d+).1/; if ($r1){ open my $in, "< molpro.out" or die "geht nicht\n"; while (<$in>){ if (/$re1/){my $x = $1} } } if ($r2){ open my $in, "< molpro.out" or die "geht nicht\n"; while (<$in>){ if (/$re2/){my $x = $1} } } if ($r3){ open my $in, "< molpro.out" or die "geht nicht\n"; while (<$in>){ if (/$re3/){my $x = $1} } } }, });