使用正则表达式运行 ruby 脚本时,
s = object.value.gsub(/(\A[\s\xA0]*|[\s\xA0]*\Z)/n, '')
Run Code Online (Sandbox Code Playgroud)
有错误
invalid multibyte escape: /(\A[\s\xA0]*|[\s\xA0]*\Z)/ (SyntaxError)
Run Code Online (Sandbox Code Playgroud)
知道为什么吗?红宝石版2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
我找到了一个聪明的技巧来为字符串预分配内存,但是下面的代码片段比没有技巧的情况下表现更差(通过用语句注释掉语句)vec($str, 0x100000, 8)=0;.
use Time::HiRes qw( gettimeofday );
my $big = "a" x 100;
my $str = "";
vec($str, 0x100000, 8)=0;
$ts = getTS();
for ($i=0; $i < 1000000; $i ++) {
$str = "";
for ($j=0; $j<100; $j++) {
$str .= $big;
}
}
printf "took %f secs\n", getTS() - $ts;
sub getTS {
my ($seconds, $microseconds) = gettimeofday;
return $seconds + (0.0+ $microseconds)/1000000.0;
}
Run Code Online (Sandbox Code Playgroud)
凭借巧妙的技巧,它需要9.1秒.如果没有巧妙的技巧,它需要7.8秒.
聪明的技巧应该更快,因为它不需要这么多realloc().知道为什么吗?
这里是八度新的.
我有一个矩阵X,想要更改所有元素(作为数字),如下所示:如果元素的值大于10,则将其更改为10,否则保持相同的值.
从理论上讲,我可以做两个循环并遍历每个元素.不知道有没有一种简单的方法可以做到这一点.
perl中的"+"表示添加,在我的项目中,我们做了很多字符串连接.我知道我们可以用"."连接.运营商,如:
$x = $a . $b; #will concatenate string $a, and string $b
Run Code Online (Sandbox Code Playgroud)
但"+"感觉更好.想知道是否有魔法使下面的连接.
$x = $a + $b;
Run Code Online (Sandbox Code Playgroud)
更好的是,如果两个变量($ a,$ b)都是数字,则检查运算符类型,然后按通常意义执行"添加",否则执行连接.
我知道在C++中,可以重载运算符.希望perl中有类似的东西.
谢谢.