我是Emacs包的维护者,其整个目的与用户交互有关.每当我对代码进行更改时,我都必须手动测试它以查看它是否有效.如果我能做一些自动化测试会很好,但我不知道如何以这样做的方式模拟用户输入.有没有办法运行一个交互式功能,提示用户,然后通过模拟键入响应该提示(包括像Cj这样的组合键)?
在perl中假设我有一个字符串'hello\tworld\n',我想要的是:
'hello world
'
Run Code Online (Sandbox Code Playgroud)
也就是说,"你好",然后是文字制表符,然后是"世界",然后是文字换行符.或者等效地"hello\tworld\n"(注意双引号).
换句话说,是否有一个函数用于获取带有转义序列的字符串并返回一个等效的字符串,其中插入了所有转义序列?我不想插入变量或其他任何东西,只是转义序列,比如\x,哪里x是一个字母.
我很喜欢Data::Alias.它似乎在5.12中被打破.可以修复吗?它会很快修好吗?还有什么好的选择吗?
在emacs cperl-mode中,三元运算符不受特殊处理.如果你将它们分成多行,cperl-mode只是缩进每一行,就像缩进任何继续语句一样,如下所示:
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
Run Code Online (Sandbox Code Playgroud)
这不是很易读.有什么方法可以说服像这样的cperl模式缩进吗?
$result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == $qux) ? 'result3' :
($foo == $quux) ? 'result4' :
'fail_result';
Run Code Online (Sandbox Code Playgroud)
顺便说一下,来自这个问题的代码示例.
cperl-mode对三元运算符的缩进似乎存在错误.采用以下示例,该示例使用Emacs 23.1.1,cperl-mode版本5.23缩进:
my $result = ($foo == $bar) ? 'result1' :
($foo == $baz) ? 'result2' :
($foo == …Run Code Online (Sandbox Code Playgroud) 我现在正在使用perlbrew来管理perl的多个版本,但perlbrew是全局的.如果我perlbrew switch perl-5.10.1在任何shell中,那么所有shell和脚本现在将使用perl版本5.10.1.没有孤立.有没有办法让perlbrew开关在shell本地,或者是否有类似的工具能够在本地更改活动perl?
我想要一个perl子例程,它通过Tie :: IxHash模块创建并返回一个有序的哈希.它看起来像这样:
sub make_ordered_hash {
my @hash_contents = munge_input(@_); # I get a list of alternating keys and values
tie(my %myhash, Tie::IxHash, @hash_contents);
return %myhash;
}
Run Code Online (Sandbox Code Playgroud)
现在,如果我这样做my %ordered_hash = make_ordered_hash(@input_stuff),%ordered_hash实际上会被绑定,还是会将%myhash解压缩到列表中,然后从该列表中创建一个新的(普通的,无序的)哈希?如果我不能以这种方式返回绑定哈希,我可以返回一个引用吗?也就是说,我可以通过make_ordered_hash返回\%myhash来修复它吗?
我可以在穆斯这样做吗?
package SomeClass;
use Moose;
has start => (
isa => 'Int',
is => 'ro',
lazy => 1,
default => sub { $_[0]->end },
);
has end => (
isa => 'Int',
is => 'ro',
lazy => 1,
default => sub { $_[0]->start },
);
...
Run Code Online (Sandbox Code Playgroud)
换句话说,我想要两个名为"start"和"end"的属性,如果只指定了其中一个属性,我希望将另一个属性设置为相同的东西.不指定任何一个是错误.
这种相互依赖的设置是否有效?
Emacs代码apply-partially是这样的:
(defun apply-partially (fun &rest args)
"Return a function that is a partial application of FUN to ARGS.
ARGS is a list of the first N arguments to pass to FUN.
The result is a new function which does the same as FUN, except that
the first N arguments are fixed at the values with which this function
was called."
`(closure (t) (&rest args)
(apply ',fun ,@(mapcar (lambda (arg) `',arg) args) args)))
Run Code Online (Sandbox Code Playgroud)
它返回一个看起来很像lambda表达式的列表,除了lambda被替换为closure (t).例如, …
我想在我的Perl发行版中添加一个需要模块Foo的测试,但是我的发行版不需要Foo; 只有测试需要Foo.所以我不想将模块添加到依赖项中,而是我只想跳过需要Foo的测试,如果Foo在构建时不可用.
这样做的正确方法是什么?我是否应该将我的Foo测试与eval块一起包装use Foo;,以便在加载Foo失败时测试不会运行?或者有更优雅的方式吗?
我在多个工作站上使用相同的Emacs配置,通过git同步.但是,不同的工作站(和笔记本电脑)具有不同的屏幕尺寸和像素密度等,所以我需要有一些特定于每台机器的设置.有没有办法在某些机器上有条件地执行我的配置的某些部分,同时仍然保持配置文件在所有部分中相同?
perl ×7
emacs ×4
testing ×2
attributes ×1
closures ×1
cperl-mode ×1
elisp ×1
environment ×1
escaping ×1
indentation ×1
moose ×1
perl-module ×1
perl5.12 ×1
perlbrew ×1
return-type ×1