gpt4 book ai didi

perl - 如何将像 "1..15,16"这样的字符串扩展为数字列表?

转载 作者:行者123 更新时间:2023-12-04 16:21:02 26 4
gpt4 key购买 nike

我有一个 Perl 应用程序,它从命令行获取输入:

application --fields 1-6,8

我需要在命令行上按照用户的要求显示字段。

我想用 '..' 代替 '-' 以便我可以将它们存储在数组中,例如
$str = "1..15,16" ;
@arr2 = ( $str ) ;
@arr = ( 1..15,16 ) ;
print "@arr\n" ;
print "@arr2\n" ;

这里的问题是 @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 文件上使用而编写的,如果有人记得那些是什么)。它还允许无限范围(字符串以 -number 开始或以 number- 结尾),元素方法将在这些范围内发出嘶嘶声。

关于perl - 如何将像 "1..15,16"这样的字符串扩展为数字列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1016766/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com