[英]Trouble with simple arithmetic in perl
目前,我在執行下面代碼片段中所示的簡單算術時遇到麻煩,我認為問題可能是由於范圍引起的,但是我是一個新手,並且不能完全理解我可能會遇到的范圍問題,任何幫助將不勝感激。 謝謝。
use POSIX;
use integer;
my $firstnumber1 = 0;
my $secondnumber1 = 0;
my $digitcount = 0;
my $string = "ADD(5,4);";
if($string =~ /^ADD/)
{
foreach my $char (split //, $string)
{
print "char = $char\n";
if((isdigit($char)) && ($digitcount == 0))
{
$firstnumber1 = int($char);
print "firstnumber = $firstnumber1\n";
}
if((isdigit($char)) && ($digitcount == 1))
{
$secondnumber1 = int($char);
print "secondnumber = $secondnumber1\n";
}
$digitcount++;
my $finalnumber1 = $firstnumber1 + $secondnumber1
}
}
print "$finalnumber1 = $firstnumber1 + $secondnumber1";
您正在使用一種尚不完全了解的語言來編寫解析器。 解析器很難 ,所以我認為您應該從其他角度開始
在編寫的每個Perl程序的頂部,您必須始終 use strict
use warnings 'all'
並use warnings 'all'
。 那會提醒您頂部finalnumber1
沒有被聲明。 並且所有聲明都應盡可能晚 -通常是在首次定義的地方進行
不清楚您打算在第二個數字之后發生什么! 不要使用$firstnumber1
等過長的標識符,如果發現使用的標識符以數字結尾,則表明您需要一個數組
這是我對您嘗試做的事情的看法
use strict;
use warnings 'all';
use v5.10;
my ($n1, $n2);
my $nc = 0;
my $total = 0;
my $string = 'ADD(5,4);';
if ( $string =~ /^ADD/ ) {
for my $char ( split //, $string ) {
say "char = $char";
if ( $char =~ /[0-9]/ ) {
if ( $nc == 0 ) {
$n1 = $char;
say "firstnumber = $n1";
}
else {
$n2 = $char;
say "secondnumber = $n2";
}
$total += $char;
++$nc;
}
}
}
say "$total = $n1 + $n2";
char = A
char = D
char = D
char = (
char = 5
firstnumber = 5
char = ,
char = 4
secondnumber = 4
char = )
char = ;
9 = 5 + 4
看起來$digitCount
增量應該在兩個if塊內。 現在,您將在處理A
然后在D
上依次增加它,依此類推,所以到5
$digitCount
將為4,這$digitCount
條件永遠不會為真。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.