我有一个外部模块,它返回一些字符串.我不确定字符串是如何返回的.我真的不知道,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::CaptureOutput或Capture::Tiny模块,它会再次开始喊"宽字符".
我有几个问题,主要是关于究竟发生了什么.(我试着阅读perldocs,但我不是很聪明)
use encoding做什么的?为什么默认编码不同utf-8?编辑:有人告诉我使用-C或binmode或PERL_UNICODE.这是一个很好的建议.然而,不知何故,两个捕获模块都神奇地破坏了STDOUT的UTF8-ness.这似乎是模块的一个错误,但我不太确定.
edit2:好的,最好的解决方案是转储模块并自己编写"捕获"(灵活性更低).
突然,编译我的perl脚本开始花费太多时间.(每个约一分钟)
我在脚本中所拥有的并不重要,但重要的是require,use我使用了多少.
我认为这是在编译,但我不确定.问题是 - 如果我只运行检查部分 - 意思是perl -c script.h,它需要大约相同的时间.
我的问题是 - 如何调试它,如何找出,perl究竟做了什么,找出需要花费这么多时间的东西?
我试图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字母.
我现在正在阅读有关抢先式多任务处理的资料 - 有一件事让我失望.
所有这些材料都暗示,操作系统以某种方式从"外部"中断CPU上的运行过程,因此导致上下文切换等.
但是,我无法想象当操作系统的内核只是CPU上的另一个进程时,它将如何工作.当另一个进程占用CPU时,操作系统如何从"外部"切换?
可能重复:
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是不可变的,我不能这样做.有什么解决方案吗?因为我不能成为第一个想要++在整数变量上使用的人...
我是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/hello和http://localhost:8080/HelloWorldServlet/goodbye对它们两者做出反应.例如像(伪代码)
override def doGet(req: HttpServletRequest, resp: HttpServletResponse) = {
resp.setContentType("text/plain")
if …Run Code Online (Sandbox Code Playgroud) 比方说,我有一个文本文件text.
我想要做的是将文本文件放入管道(如cat text |),但在顶部和底部添加了行 - 但没有创建新文件(因为text文件有点大)或修改它.
那可能吗?我在想,echo $(echo "line"; cat text; echo "line")但我不喜欢那样.
我试图围绕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,但它实际上并没有在任何地方实现.到底发生了什么?
我想检查给定的符文是否在基本的多语言平面中。
也就是说,要在此函数中添加什么-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) 在这个小例子中,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实际上实际上返回了指针的大小.
我试着用驼鹿.这很好,当它工作时.
但是,我发现了一些看起来像虫子的东西(但我会在提交之前问这里).
当我运行此代码时
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,在下划线之后总是有垃圾)
你认为这是一个驼鹿虫吗?
我以为我知道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返回一个可以单独运行但仍然使用对象属性的函数?
如果我像这样运行一个简单的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?所有角色都是这样展开的?而且,最重要的是,如何阻止它扩展?