我希望确保给定值上的字符数小于1000.我的函数不确定该值是数组,散列还是标量.
if (ref($value) eq 'SCALAR' && length($value) >= 1000 ) {
return;
}
Run Code Online (Sandbox Code Playgroud)
但是,如果传入一个数字会发生什么?我是否会在不知不觉中将数字值转换为字符串,如果是这样,是否有办法在检查数字长度之前检查数值?
在你的问题中,你是说你检查字符串中的字符数,并且包含它的变量也可以是散列引用或数组引用.
Run Code Online (Sandbox Code Playgroud)if (ref($value) eq 'SCALAR' && length($value) >= 1000 ) { return; }
但是,您的代码不会检查字符串或数字的长度.它假定变量可能是标量引用,但随后检查标量引用的字符串化的长度.
say \"asdf";
# SCALAR(0x268e7f8)
say length \"asdf";
# 17
Run Code Online (Sandbox Code Playgroud)
64位系统上的长度应始终为17,而32位系统上的长度应为16.
实际取消引用标量引用后,将适用以下内容.
# here and here
# ## #
if (ref($value) eq 'SCALAR' && length( ${ $value } ) >= 1000 ) {
return;
}
Run Code Online (Sandbox Code Playgroud)
由于Perl没有类型,因此该数字将被视为字符串.传球"500"与传球相同500.
say length 500;
say length "500";
__END__
3
3
Run Code Online (Sandbox Code Playgroud)
变量本身不会被转换.你根本不需要关心它.只要您在标量引用中包含数字,您的代码就可以了.
标量引用不关心它是否引用字符串或数字.
say length ${ \500 };
say length ${ \"500" };
__END__
3
3
Run Code Online (Sandbox Code Playgroud)