小编Dem*_*Imp的帖子

Perl UTF8级联问题

在字符串编码然后解码后,我无法将utf8字符串连接到另一个字符串.

#!/usr/bin/perl
use strict;
use utf8;
use URI::Escape;

# binmode(STDOUT, ":utf8");

my $v = "?????????";
my $v2 = uri_unescape(uri_escape_utf8($v));

print "Works: $v, ", "$v2\n";
print "Fails: $v, $v2\n";
print "Works: " . "$v2\n";
Run Code Online (Sandbox Code Playgroud)

这是输出:

Works: ????????? ,?????????
Wide character in print at ./testUTF8.pl line 14.
Fails: ?????????, ضثصثضصثشس
Works: ?????????
Run Code Online (Sandbox Code Playgroud)

如果我使用binmode utf8,正如perl的文档所示,警告消息消失但所有3都失败:

Fails: ?????????, ضثصثضصثشس
Fails: ?????????, ضثصثضصثشس
Fails: ضثصثضصثشس
Run Code Online (Sandbox Code Playgroud)

这是怎么回事?我怎样才能解决这个问题?

PS我需要它转义URL.有没有什么方法可以逃脱/ unescape在perl像javascript一样?例如,Perl给我:%D8%B6%D8%AB%D8%B5%D8%AB%D8%B6%D8%B5%D8%AB%D8%B4%D8%B3

这可以解决:ØØØ«ØμØ«ØØØμØ«Ø'س

当我用Javascript转义相同的文本时,我得到:%u0636%u062B%u0635%u062B%u0636%u0635%u062B%u0634%u0633

perl utf-8

5
推荐指数
1
解决办法
360
查看次数

Perl字符串,字符串中的变量后跟单引号,另一个字符做什么?

我很长一段时间才遇到了Perl的第一个奇怪的"怪癖".我似乎无法在网上找到它的任何文档,我不知道Perl在做什么.

让我们切入追逐:

my $name = "Steve";
my $v = "$name's name is $name";
Run Code Online (Sandbox Code Playgroud)

$ v的价值将变成"名字是史蒂夫".我使用vim,第一个$ name变成奇怪的颜色(绿色而不是普通的蓝绿色).所以我知道这是一个众所周知的功能,但我不明白发生了什么.

对于那些可能想要提出替代方案的人,我知道我可以做任何一件事而没有任何问题:

$v = $name . "'s name is $name";
$v = "${name}'s name is $name";
Run Code Online (Sandbox Code Playgroud)

我很好奇Perl在我给出的第一个案例中做了什么以及它的用途是什么.

string perl

4
推荐指数
1
解决办法
214
查看次数

C++:Linux中的时序(使用clock())不同步(由于OpenMP?)

在程序的顶部和末尾,我使用clock()来计算程序完成所需的时间.不幸的是,它的报告时间似乎只有一半.我用"time"命令仔细检查了这一点.

我的计划报告:在45.86s完成

时间命令报告:实际0m22.837s用户0m45.735s sys 0m0.152s

使用我的手机定时,它在23秒完成(又名:"真实"时间)."用户"时间是所有线程的总和,因为我使用的是OpenMP.(你可以在这里阅读:'真实','用户'和'sys'在时间(1)的输出中是什么意思?)

那么,为什么clock()报告的是"用户"时间而不是"真实"时间?我应该使用不同的函数来计算程序运行的时间吗?

作为旁注,Windows的clock()按预期工作,并在"实际"时间内报告.

c c++ time clock openmp

1
推荐指数
1
解决办法
801
查看次数

Perl:如何在不创建数组副本的情况下取消引用数组?

当我使用@ $ arrayRef或@ {$ arrayRef}取消引用数组时,它似乎创建了数组的副本.是否有正确的方法来取消引用数组?

这段代码......

sub updateArray1 {
        my $aRef = shift;
        my @a = @$aRef;
        my $aRef2 = \@a;

        $a[0] = 0;
        push(@a, 3);
        my $aRef3 = \@a;

        print "inside1 \@a: @a\n";
        print "inside1 \$aRef: $aRef\n";
        print "inside1 \$aRef2: $aRef2\n";
        print "inside1 \$aRef3: $aRef3\n\n";
}

my @array = (1, 2);

print "before: @array\n";
my $ar = \@array;
print "before: $ar\n\n";

updateArray1(\@array);

print "after: @array\n";
$ar = \@array;
print "after: $ar\n\n";
Run Code Online (Sandbox Code Playgroud)

......有输出......

before: 1 2
before: ARRAY(0x1601440)

inside1 @a: …
Run Code Online (Sandbox Code Playgroud)

arrays perl function subroutine dereference

1
推荐指数
2
解决办法
956
查看次数

标签 统计

perl ×3

arrays ×1

c ×1

c++ ×1

clock ×1

dereference ×1

function ×1

openmp ×1

string ×1

subroutine ×1

time ×1

utf-8 ×1