加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl – 如何将“1..15,16”之类的字符串扩展为数字列表?

发布时间:2020-12-15 21:15:29 所属栏目:大数据 来源:网络整理
导读:我有一个Perl应用程序,从命令行输入一个输入: application --fields 1-6,8 我需要在命令行上显示用户请求的字段. 我想用’…’代替’ – ‘,以便我可以将它们存储在数组中,例如 $str = "1..15,16" ;@arr2 = ( $str ) ;@arr = ( 1..15,16 ) ;print "@arrn"
我有一个Perl应用程序,从命令行输入一个输入:
application --fields 1-6,8

我需要在命令行上显示用户请求的字段.

我想用’…’代替’ – ‘,以便我可以将它们存储在数组中,例如

$str = "1..15,16" ;
@arr2 = ( $str ) ;
@arr = ( 1..15,16 ) ;
print "@arrn" ;
print "@arr2n" ;

这里的问题是@arr工作正常(应该如此),但在@ arr2中,整个字符串不会扩展为数组元素.

我尝试过使用转义序列,但没有运气.

可以这样做吗?

解决方法

如果这是用户输入,如果您有任何安全问题,请不要在其上使用字符串eval.

请尝试使用Number::Range:

use Number::Range;

 $str = "1..15,16" ;
 @arr2 = Number::Range->new( $str )->range;
 print for @arr2;

为避免死于无效范围,请执行以下操作:

eval { @arr2 = Number::Range->new( $str )->range; 1 } or your_error_handling

还有Set::IntSpan,它使用 – 而不是..:

use Set::IntSpan;

 $str = "1-15,16";
 @arr2 = Set::IntSpan->new( $str )->elements;

但它要求范围有序且不重叠(它是为了在.newsrc文件上使用而编写的,如果有人记得那些是什么的话).它还允许无限范围(字符串开始 – 数字或结束数字 – ),元素方法将呱呱叫.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读