#!/usr/bin/perl if(0){ $a=1.0; $b=0.1; foreach $i (1..50){ $b=$b/2.0; $c=$a+$b; print "$i $b $c\n"; } exit; } if(0){ #...... use if $a=1.0; $b=0.1; for($i=0;$i<55;$i++){ $b=$b/2.0; $c=$a+$b; print "$i $b $c\n"; if( $a == $c){ print "now \$a and \$c are equal!\n"; last; } #... break out the loop } exit; } if(0){ #...... use formats $a=1.0; $b=0.1; for($i=0;$i<55;$i++){ $b=$b/2.0; $c=$a+$b; printf "%5d %30.25f %30.25f %30.25f\n",$i,$a,$b,$c; if( $a == $c){ last; } #... break out the loop } exit; } if(0){ #....... use an array, and write compact $a=1.0; $b=0.1; for($i=0;$i<55;$i++){ $b=$b/2.0; $c=$a+$b; $arr[$i]=$c; } $k=0; foreach $x (@arr){ printf "%d %30.25f\n",$k,$x; $k++; if( $x == $a){ last; } } exit; } if(1){ #....... use function $a=1.0; $b=0.1; for($i=0;$i<55;$i++){ $b=$b/2.0; $c=$a+$b; $arr[$i]=$c; } $z1=111; $z2=222; @ret=func_compare($a,@arr); $meq=shift(@ret); $mne=shift(@ret); #... get the 2 scalars back print "after func_compare: z1=$z1 z2=$z2 (which one changed?) meq=$meq mne=$mne \n"; #...... print the fomp array foreach(@ret){ print " $_ "; } print "\n"; exit; } #...... functions, how to hand back results, local vars sub func_compare{ local($z)=shift(@_); local(@y)=@_; local($x,$i,@r,$k); local($z1); $z1=555; $z2=666; print "\$b = $b is a global variable!\n"; local($neq,$nne); $neq=0; $nne=0; $k=0; foreach $x (@arr){ if($x == $a){ $neq++; $r[$k]="${k}-->eq"; printf(" they are equal %30.25f %30.25f\n", $a,$x); } if($x != $a){ $nne++; $r[$k]="${k}-->ne"; printf(" they are not eq. %30.25f %30.25f\n", $a,$x); } $k++; } return( ($neq,$nne,@r) ); }