什么是;0$variable";用perl是什么意思?

什么是;0$variable";用perl是什么意思?,perl,Perl,我正在看一行perl代码,并试图弄清楚它的实际含义。看起来像是 $somestring=“0$somestring”而(长度($somestring)

我正在看一行perl代码,并试图弄清楚它的实际含义。看起来像是

$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
,它解决了这个问题和类似的问题。