小编Kar*_*lek的帖子

perl中的Unicode字符串混乱

我有一个外部模块,它返回一些字符串.我不确定字符串是如何返回的.我真的不知道,Unicode字符串是如何工作的以及为什么.

例如,该模块应返回捷克语单词"být",意思是"待定".(如果你看不到第二个字母 - 它应该是这样的.)如果我显示模块返回的字符串,使用Data Dumper,我将其视为b\x{fd}t.

但是,如果我尝试打印它print $s,我会得到"宽字符打印"警告,并且?而不是ý.

如果我尝试Encode::decode(whatever, $s);,无论如何都不能打印结果字符串(总是带有"宽字符"警告,有时带有损坏的字符,有时是正确的),无论我放入什么whatever.

如果我尝试Encode::encode("utf-8", $s);,可以打印生成的字符串,没有问题或错误消息.

如果我使用use encoding 'utf8';,打印工作,无需编码/解码.但是,如果我使用IO::CaptureOutputCapture::Tiny模块,它会再次开始喊"宽字符".

我有几个问题,主要是关于究竟发生了什么.(我试着阅读perldocs,但我不是很聪明)

  1. 为什么我不能在从模块中取出后立即打印字符串?
  2. 为什么我不能打印字符串,通过"解码"解码?什么是"解码"呢?
  3. 究竟"编码"到底是什么,为什么编码后打印它没有问题?
  4. 到底是use encoding做什么的?为什么默认编码不同utf-8
  5. 如果我想毫无问题地打印标量,即使我想使用其中一个捕获模块,我该怎么办?

编辑:有人告诉我使用-CbinmodePERL_UNICODE.这是一个很好的建议.然而,不知何故,两个捕获模块都神奇地破坏了STDOUT的UTF8-ness.这似乎是模块的一个错误,但我不太确定.

edit2:好的,最好的解决方案是转储模块并自己编写"捕获"(灵活性更低).

unicode perl utf-8

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

Perl脚本突然编译得很慢

突然,编译我的perl脚本开始花费太多时间.(每个约一分钟)

我在脚本中所拥有的并不重要,但重要的是require,use我使用了多少.

我认为这是在编译,但我不确定.问题是 - 如果我只运行检查部分 - 意思是perl -c script.h,它需要大约相同的时间.

我的问题是 - 如何调试它,如何找出,perl究竟做了什么,找出需要花费这么多时间的东西?

perl

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

Perl的YAML :: XS和unicode

我试图YAML::XS在unicode字母上使用perl的模块,它似乎没有按照应有的方式工作.

我在脚本中写了这个(保存在utf-8中)

use utf8;
binmode STDOUT, ":utf8"; 
my $hash = {? => "?"}; #czech letters with unicode codes U+010D and U+0159

use YAML::XS;
my $s = YAML::XS::Dump($hash);
print $s;
Run Code Online (Sandbox Code Playgroud)

-: Å印刷而不是理智.但是,根据这个链接,它应该工作正常.

是的,当我YAML::XS::Load回来时,我再次获得了正确的字符串,但我不喜欢转储字符串似乎是在一些错误的编码中的事实.

难道我做错了什么?我总是不确定perl中的unicode,坦率地说......

澄清:我的控制台支持UTF-8.此外,当我将其打印到文件时,用utf8句柄打开open $file, ">:utf8"而不是STDOUT,它仍然不能打印正确的utf-8字母.

unicode perl yaml

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

当操作系统只是其中一个进程时,抢占式多任务处理如何工作?

我现在正在阅读有关抢先式多任务处理的资料 - 有一件事让我失望.

所有这些材料都暗示,操作系统以某种方式从"外部"中断CPU上的运行过程,因此导致上下文切换等.

但是,我无法想象当操作系统的内核只是CPU上的另一个进程时,它将如何工作.当另一个进程占用CPU时,操作系统如何从"外部"切换?

operating-system multitasking

3
推荐指数
2
解决办法
942
查看次数

有没有办法在scala中使用++ on Int?

可能重复:
Scala中的++运算符

我想Int在scala中增加一个变量.但是,因为Int是不可改变的,我必须这样做

var myInt: Int = 5
....
myInt = myInt + 1
Run Code Online (Sandbox Code Playgroud)

这似乎有点太复杂了.我想做的是

var myInt: Int = 5
....
myInt++
Run Code Online (Sandbox Code Playgroud)

但是,由于Int是不可变的,我不能这样做.有什么解决方案吗?因为我不能成为第一个想要++在整数变量上使用的人...

scala

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

如何获得指向同一个servlet的不同URL?

我是Servlet技术的新手,这绝对是一个基本的问题,但我对所有对我来说太复杂的教程感到困惑.

我有一个新的servlet HelloWorldServlet.在web.xml,我有这个

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app
     PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
     "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">

<web-app>
     <servlet>
         <servlet-name>HelloWorldServlet</servlet-name>
         <servlet-class>cz.hello.HelloWorldServlet</servlet-class>
     </servlet>

     <servlet-mapping>
         <servlet-name>HelloWorldServlet</servlet-name>
         <url-pattern>/HelloWorldServlet</url-pattern>
     </servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud)

HelloWorldServlet.scala (我更喜欢scala到java)看起来像这样

package cz.hello

import javax.servlet.http.HttpServlet
import javax.servlet.http.HttpServletRequest
import javax.servlet.http.HttpServletResponse

 class HelloWorldServlet extends HttpServlet {
    override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
        resp.setContentType("text/plain")
        resp.getWriter.println("Hello, world")
    }
}
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,servlet使用Jetty加载,我很高兴,我可以看到"hello world" http://localhost:8080/HelloWorldServlet.

现在,我希望servlet能够以不同的方式对GET请求做出反应,比如说http://localhost:8080/HelloWorldServlet/hellohttp://localhost:8080/HelloWorldServlet/goodbye对它们两者做出反应.例如像(伪代码)

    override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
        resp.setContentType("text/plain")
        if …
Run Code Online (Sandbox Code Playgroud)

servlets scala

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

在将文件发送到管道之前在文件的顶部和底部添加行

比方说,我有一个文本文件text.

我想要做的是将文本文件放入管道(如cat text |),但在顶部和底部添加了行 - 但没有创建新文件(因为text文件有点大)或修改它.

那可能吗?我在想,echo $(echo "line"; cat text; echo "line")但我不喜欢那样.

linux bash

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

示例curses/ncurses Perl小部件?

我试图围绕Curses/NCurses(仍然不明白区别)和perl,更确切地说是Curses::UI模块,更确切地说是Curses :: UI :: Widget包 - 请参阅http://search.cpan.org /~mdxi/Curses-UI/lib/Curses/UI/Widget.pm.

为了理解它,我希望看到一些超级简单的"Hello World" Curses::UI::Widget从那里开始.

Curses::UI::Widget文档中有一个简单的例子,但是这不起作用,因为它调用$this->generic_focus它并且它是未定义的,我不知道它应该实际做什么.

是否有一些编写Curses::UI小部件的实际教程,或者至少有一些工作示例?

编辑:为了使自己清楚:文档中的基本文本编辑器是我的工作,但现在我想编写自己的小部件,我不确定要实现哪些功能以及如何实现.

主要是,我不确定方法应focus该做什么以及是否必须实现该方法generic_focus.

编辑2:

例如,在上面的链接文档中,函数generic_focus被编写为好像是在其中实现的Curses::UI::Widget,但它实际上并没有在任何地方实现.到底发生了什么?

curses perl ncurses

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

检查符文是否在基本多语言平面中的正确方法是什么?

我想检查给定的符文是否在基本的多语言平面中

也就是说,要在此函数中添加什么-https://play.golang.org/p/3szTn8pP7xe

package main

import (
    "fmt"
)

func isBMP(r rune) bool {
    // ???
    return false
}

func main() {
    fmt.Println(isBMP(rune('?'))) // expect true
    fmt.Println(isBMP(rune(''))) // expect false
}

Run Code Online (Sandbox Code Playgroud)

unicode go

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

c ++中的静态数组会忘记它的大小

在这个小例子中,c ++忘记了数组的大小,传递给构造函数.我想这很简单,但我看不到它.

在classes.h中,有以下代码:

#ifndef CLASSES_INC
#define CLASSES_INC
#include <iostream>

class static_class {
 public:
 static_class(int array[]) {
  std::cout<<sizeof(array)/sizeof(int)<<"\n";
 } 
};

class my_class{
 public:
 static static_class s;
 static int array[4];
};

#endif
Run Code Online (Sandbox Code Playgroud)

在classes.cpp中,有以下代码:

#include "classes.h"

int my_class::array[4]={1, 2, 3, 4}; 

static_class my_class::s = static_class(my_class::array);
Run Code Online (Sandbox Code Playgroud)

在main.cpp中,只有简单

#include "classes.h"

int main () {

 return 0;
}
Run Code Online (Sandbox Code Playgroud)

现在,所需的输出(来自static_class的构造函数)是4.但我得到的是1.为什么?

编辑:

很多答案都表明指针上的sizeof返回指针的大小.事实并非如此,AFAIK(来自http://msdn.microsoft.com/en-us/library/4s7x1k91(VS.71).aspx - "当sizeof运算符应用于数组时,它会产生总数该数组中的字节数,而不是数组标识符表示的指针的大小.")

EDIT2:

好吧,正如我发现的那样,当编译器可以看到大小时,sizeof会返回整个大小,但是当它衰减到一个指针(这就是这里的情况)时,sizeof实际上实际上返回了指针的大小.

c++

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

为什么这个Moose强制子程序不能用于Perl 5.8.8?

我试着用驼鹿.这很好,当它工作时.

但是,我发现了一些看起来像虫子的东西(但我会在提交之前问这里).

当我运行此代码时

package Experiment;

use Moose;
use Moose::Util::TypeConstraints;

subtype 'K'
    => as 'Str';

coerce 'K'
    => from 'Str'
    => via {
        s/^([^_]*).*$/$1/;
    };

has 'k' => (
    is => 'ro',
    isa => 'K',
    coerce => 1
);

1;
package main;

my $exp = new Experiment(k=>"abcd_efgh");
print $exp->k."\n";
Run Code Online (Sandbox Code Playgroud)

在一台带有perl 5.010的计算机上,它正确显示abcd.当我在5.8.8的另一台计算机上运行它(不幸的是,脚本也必须工作),我看到不正确abcd_efgh; 并且强制子程序似乎从未实际运行(例如,如果我在那里添加打印或模具,5.8.8机器上没有任何反应).

(它真的很简单,但它是一个真实的现实案例 - 我需要从字符串强制K,在下划线之后总是有垃圾)

你认为这是一个驼鹿虫吗?

perl moose

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

将`this`与对象文字一起使用

我以为我知道JavaScript,似乎我不知道.

我想定义一个像这样的对象.(例如http://www.phpied.com/3-ways-to-define-a-javascript-class/)

var apple = {
    type: "macintosh",
    color: "red",
    getInfo: function () {
        return this.color + ' ' + this.type + ' apple';
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,这看起来很好,让我们打印信息......

apple.getInfo() //returns "red macintosh apple" as expected
Run Code Online (Sandbox Code Playgroud)

好了,现在把功能拿出来再运行一次......

var func = apple.getInfo; func(); //returns "undefined undefined apple"
Run Code Online (Sandbox Code Playgroud)

嗯,这不是我的预期.显然,this被解释为window.这不是我想要的.

我的问题是 - 什么是重写apple文字的惯用的首选方法,以便apple.getInfo返回一个可以单独运行但仍然使用对象属性的函数?

javascript

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

为什么'\ t',从"反引号"调用返回,扩展到制表机?所有角色都扩展了什么?

如果我像这样运行一个简单的perl脚本(在linux上,使用bash),

$to_run = q(echo '\t');
$res = `$to_run`;
print $res
Run Code Online (Sandbox Code Playgroud)

我希望\t将打印 - 即反斜杠字符和"t"字符.的确,如果我只是在bash中运行

echo '\t'
Run Code Online (Sandbox Code Playgroud)

我看\t.但是,perl脚本会打印制表符.

为什么制表机扩展了$res?所有角色都是这样展开的?而且,最重要的是,如何阻止它扩展?

bash perl

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