sud*_*03r 5 string perl numbers range
我有一个Perl应用程序,从命令行输入一个输入:
application --fields 1-6,8
Run Code Online (Sandbox Code Playgroud)
我需要在命令行上显示用户请求的字段.
我想用'...'代替' - ',以便我可以将它们存储在数组中,例如
$str = "1..15,16" ;
@arr2 = ( $str ) ;
@arr = ( 1..15,16 ) ;
print "@arr\n" ;
print "@arr2\n" ;
Run Code Online (Sandbox Code Playgroud)
这里的问题是@arr工作正常(应该如此),但在@ arr2中,整个字符串不会扩展为数组元素.
我尝试过使用转义序列,但没有运气.
可以这样做吗?
yst*_*sth 26
如果这是用户输入,如果您有任何安全问题,请不要在其上使用字符串eval.
尝试使用Number :: Range代替:
use Number::Range;
$str = "1..15,16" ;
@arr2 = Number::Range->new( $str )->range;
print for @arr2;
Run Code Online (Sandbox Code Playgroud)
为避免死于无效范围,请执行以下操作:
eval { @arr2 = Number::Range->new( $str )->range; 1 } or your_error_handling
Run Code Online (Sandbox Code Playgroud)
还有Set :: IntSpan,它使用 - 而不是..:
use Set::IntSpan;
$str = "1-15,16";
@arr2 = Set::IntSpan->new( $str )->elements;
Run Code Online (Sandbox Code Playgroud)
但是它要求范围是有序的和不重叠的(它是为了在.newsrc文件上使用而编写的,如果有人记得它们是什么的话).它还允许无限范围(字符串开始 - 数字或结束数字 - ),元素方法将呱呱叫.