什么是;0$variable";用perl是什么意思?
我正在看一行perl代码,并试图弄清楚它的实际含义。看起来像是什么是;0$variable";用perl是什么意思?,perl,Perl,我正在看一行perl代码,并试图弄清楚它的实际含义。看起来像是 $somestring=“0$somestring”而(长度($somestring)
$somestring=“0$somestring”而(长度($somestring)<10)
我理解这个赋值的其他部分,除了这里说的
0$somestring
之外?我相信它只是在$Something的值后面加上0,然后赋值给$somestring。
注:两个变量在L.H.S和R.H.S上不同
最后检查变量的长度是否小于10或更多。我知道不鼓励使用代码答案……但这似乎足够简单:
£ perl -e '
quote> $mystring = "48";
quote> $mystring = "0$mystring" while(length($mystring)<10);
quote> print "$mystring\n";
quote> '
0000000048
£
perl-e'
quote>$mystring=“48”;
quote>$mystring=“0$mystring”而(长度($mystring)打印“$mystring\n”;
引用>'
0000000048
£
“0$SomeString”
是一个双引号字符串。它包含字符“0”,后跟变量$SomeString
的内容
如果不清楚,请解释其中哪一部分让您感到困惑。(注意,在Perl中,$somestring
、$somestring
和$somestring
是不等价的。为了回答这个问题,我假设这三个变量都是$somestring
。如果它们真的是三个独立的变量,那么问题中的代码行要么根本不起作用全部或永久循环,取决于$someString
的长度)
$somestring=“0$somestring”
修改$somestring
的值,以在字符串开头插入一个0
添加了while
部分后,您所询问的代码行的总体效果是将$somestring
填充到10个字符的长度,并加上前导零。最原始的英语版本:$somestring=“0$somestring”而(长度($somestring)<10)
更具可读性的等效版本:
while( length($someString) < 10 ) {
# prepend "0" to $someString (increases length of $someString by 1)
$someString = '0' . $someString;
}
while(长度($someString)<10){
#将“0”前置到$someString(将$someString的长度增加1)
$someString='0'。$someString;
}
一种更明智的方法是$somestring='0'x(10-length($somestring))。$somestring
如果,
$somestring
应该包含一个整数值,并且您想用0
s填充该数值,则有:sprintf'%010d',$somestring
称为字符串插值。变量被插值到字符串常量中。有关详细信息,请参阅。注意,在Perl案例中,$s很重要omestring
不同于$SomeString
。也许第一个$SomeString
应该是$SomeString
?否则它将永远循环。sprintf“%010s”,$SomeString
也可以正常工作,即使对于非数字值。@Borodin有人提出过其他要求吗?你认为我为什么要说有人这样做?“如果假定$somestring包含一个整数值“似乎有不必要的限制。我的示例演示了假定$somestring
包含一个整数值的情况,因此它的限制性与需要的完全相同。对于其他可能的替代方案,感兴趣的读者可以查阅手册。答案分为三部分:1)我确定了原始代码段试图解决的问题;2)我展示了一种不使用循环,也不使用除原始代码段中已有的length
以外的任何其他函数的方法;3)我将OP指向sprintf
,它解决了这个问题和类似的问题。