我在以下行的.emacs文件中收到错误:
(switch-to-buffer *Completions*)
Run Code Online (Sandbox Code Playgroud)
错误:符号值作为变量是无效的
我做了describe-function对switch-to-buffer,发现我可以通过它的缓冲区(和我目前并不需要另一个可选参数).我究竟做错了什么?
只是几个笔记:
a.我还需要两条相似的线路(switch-to-buffer *grep*),(switch-to-buffer *compilation*)所以使用简单的解决方案(switch-to-completions)并不能解决我的所有问题.
湾 我需要的所有缓冲区都已打开,所以我不认为这是问题所在.
我一直在使用MIME :: Lite一段时间,直到现在都没有问题.
我正在尝试附加.txt文件,但文件(发送后)内部没有内容.
我知道文件中有一些东西,因为我.txt在同一个脚本中创建文件.我知道文件的位置并且可以看到它的内容,但是当我告诉MIME::Lite附加.txt文件时,电子邮件只带有文件名,只有64个字节.
这MIME::Lite是我的脚本部分的代码:
$msg = new MIME::Lite(From => $from,To => $to,Subject => $subject,Data => "Data",Type => "multipart/mixed",);
$msg->attach(Type => 'TEXT', Data => @message);
$msg->attach(Type => 'TEXT', Path => $stat_file);
$msg->send();
Run Code Online (Sandbox Code Playgroud)
哪里$stat_file=/in/some/dir/cheese/txt/somefile.txt
除了第3行外,一切正常.它正确地找到并附加我指向的文件,但当它到达我的电子邮件时,它是一个.txt64字节的空白文件.
我已经尝试了这个代码的前3行中的每一行的几个变体,但不知道我错过了什么.
有人看到这个脚本会按照解释的那样执行的原因吗?
使用时我遇到与此Moose相关的错误BUILD.当我改变BUILDALL它似乎工作.注意使用Class::MOP::load_class
运用 BUILD
Perl version: 5.012002
Class::MOP::Version: 1.11
Moose::Version: 1.24
Applying fixup GV::WebServer::Fixups::Development
aflott-g3 at a.pl line 83.
Error: trying to call refresh() in GV::WebServer::Fixups::Development produced: The 'add_attribute' method cannot be called on an immutable instance at /opt/cidc-perl/perl-5.12.2/lib/perl5/x86_64-linux/Class/MOP/Class/Immutable/Trait.pm line 32
Class::MOP::Class::Immutable::Trait::_immutable_cannot_call('add_attribute') called at /opt/cidc-perl/perl-5.12.2/lib/perl5/x86_64-linux/Class/MOP/Class/Immutable/Trait.pm line 37
Class::MOP::Class:::around('CODE(0x13a2e028)', 'Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x13d58...', 'architecture', 'is', 'ro', 'isa', 'Str', 'lazy', 1, ...) called at /opt/cidc-perl/perl-5.12.2/lib/perl5/x86_64-linux/Class/MOP/Method/Wrapped.pm line 159
Class::MOP::Method::Wrapped::__ANON__('Class::MOP::Class::Immutable::Moose::Meta::Class=HASH(0x13d58...', 'architecture', 'is', 'ro', 'isa', 'Str', 'lazy', 1, 'default', ...) called at /opt/cidc-perl/perl-5.12.2/lib/perl5/x86_64-linux/Class/MOP/Method/Wrapped.pm line …Run Code Online (Sandbox Code Playgroud) 这个错误激怒了我.我在括号错误或缺少括号的行附近看不到任何内容.有人帮我一把吗?这是我的第一篇文章,如果格式化关闭,请原谅我; 我想我做对了.
编辑:第87行,');' 错误,就是这一行:select(SEXTANT_DAEMON_LOG);
syntax error at -edited- line 87, near ");"
syntax error at -edited- line 92, near "if"
syntax error at -edited- line 99, near "if"
Unmatched right curly bracket at -edited- line 102, at end of line
syntax error at -edited- line 102, near "}"
syntax error at -edited- line 109, near "}"
syntax error at -edited- line 120, near ");"
BEGIN not safe after errors--compilation aborted at -edited- line 122.
Run Code Online (Sandbox Code Playgroud)
这是错误附近的代码(这里是完整代码):
$MAIN_DBH = getConnection('Main'); …Run Code Online (Sandbox Code Playgroud) 有没有办法让我从我的来电者返回而不是给我的来电者?例如
sub foo {
bar();
# this never gets executed
}
sub bar {
return_from_caller(5);
}
# This prints 5
print foo();
Run Code Online (Sandbox Code Playgroud)
(理由:我正在编写一个函数memoize_self,它在函数本身内记忆一个函数.我希望它能像这样工作:
sub complex_function {
my ($x, $y) = @_;
memoize_self({key => $y, expires_in => '5min'));
# compute $result
return $result;
}
Run Code Online (Sandbox Code Playgroud)
memoize_self将检查自己的缓存,如果它得到一击,返回缓存值从它的调用者.否则,它将重新调用该函数(使用动态范围的var来避免明显的无限循环),将返回值存储在缓存中并再次返回它.
如果没有从调用者返回的能力,我可能会使用$ _并以这种方式编写它:
return $_ if memoize_self({key => $y, expires_in => '5min'));
Run Code Online (Sandbox Code Playgroud)
但这是额外的噪音,也没有考虑上下文.)
编辑:对合理建议Memoize的人 - 是的,我应该说,我很了解这个模块.我正在编写一个基于CHI的更现代和功能更强的Memoize版本.
但作为涉及到这个问题,有些情况下是非常有用的,以memoize的案件中的作用,而不是外界的功能(memoize的只做后者).它可以轻松自定义缓存键和/或确定是否要为此特定调用进行任何记忆.例如
sub complex_function {
my $key = ...; …Run Code Online (Sandbox Code Playgroud) 为什么打印8?为什么不$e改变$i?
my $i = 8;
sub u
{
return \$i;
}
my $e = u();
$e = "eer";
print $i; #8
Run Code Online (Sandbox Code Playgroud) 我有一个存储在Perl变量中的数字,我想在数组的不同位置"传递/转换/存储"它的数字.更好看的一个例子:
比方说,我有这个数字存储:
$hello = 429384
Run Code Online (Sandbox Code Playgroud)
我需要一个包含数字的新数组,所以:
$hello2[0] = 4
$hello2[1] = 2
$hello2[2] = 9
Etc..
Run Code Online (Sandbox Code Playgroud)
我可以使用几个循环来实现它,但我想知道是否有一种有效且快速的方法.Thx提前!
我正在阅读GitHub上的CIF(Collective Intelligence Framework)源代码
在文件中src/lib/CIF/Generated.pm.in我看到了这样的声明
use constant PROTOCOL_VERSION => @CIF_PROTOCOL_VERSION@;
Run Code Online (Sandbox Code Playgroud)
为什么有两个标志 @?
package CIF;
use warnings;
use strict;
use constant VERSION => '@CIF_VERSION_MAJOR@.@CIF_VERSION_MINOR@.@CIF_VERSION_PATCH@@CIF_VERSION_META@';
our ($MAJOR_VERSION, $MINOR_VERSION, $PATCH, $META) = VERSION =~ /^(\d+)\.(\d+)\.(\d+)-?([\w\.\d]+)?$/;
use constant PROTOCOL_VERSION => @CIF_PROTOCOL_VERSION@;
use constant ORG => '@ORG@';
use constant DEFAULT_PORT => @DEFAULT_PORT@;
use constant DEFAULT_FRONTEND_PORT => DEFAULT_PORT();
use constant DEFAULT_BACKEND_PORT => (DEFAULT_PORT() + 1);
use constant DEFAULT_PUBLISHER_PORT => (DEFAULT_PORT() + 2);
use constant DEFAULT_STATS_PUBLISHER_PORT => (DEFAULT_PORT() + 3);
our …Run Code Online (Sandbox Code Playgroud) 我有一个哈希引用数组.散列中的日期字段存储在纪元中.在返回数组之前,我必须将其格式化为人类可读.以下是我的代码:
for my $post (@sorted) {
$post->{date} = format_time($post->{date});
push @formatted, $post;
}
Run Code Online (Sandbox Code Playgroud)
我试过了
my @formatted = map {$_{date} = format_time($_{date})} @sorted;
Run Code Online (Sandbox Code Playgroud)
除{日期}之外的所有字段都将被删除.
有更聪明的方法吗?
谢谢
我写了一个脚本,我在UTF-8编码的HTML文件中啜饮,然后将其解析为树HTML::Tree.问题是解析后的字符串不再标记为UTF-8.
由于_utf8_on()不建议设置标志的方式,我正在寻找正确的方法.
我的简化代码示例:
#!/usr/bin/perl
use strict;
use warnings;
use 5.010;
use utf8::all;
use autodie;
use HTML::Tree;
use Encode qw/is_utf8/;
my $file = shift;
my $tree;
if ($file) {
my $content = slurp_in( 'file' => $file );
$tree = html_tree('content' => $content);
} else {
die "no file";
}
my $title = $tree->look_down(_tag => 'title');
$title = $title->as_HTML('');
if ( is_utf8( $title ) ) {
say "OK: $title";
} else {
say "NOT OK: $title";
}
## …Run Code Online (Sandbox Code Playgroud)