use YAML::XS;
local $YAML::XS::DumpCode=1;
...
Run Code Online (Sandbox Code Playgroud)
我收到警告:
Name "YAML::XS::DumpCode" used only once: possible typo at ..
Run Code Online (Sandbox Code Playgroud)
好吧,我知道我可以压制这个具体的警告,但它有点难看.我做错了吗?我不习惯被警告:)
我总是确定如果我将一个Perl子程序传递给一个简单的标量,它就永远不会在子程序之外改变它的值.那是:
my $x = 100;
foo($x);
# without knowing anything about foo(), I'm sure $x still == 100
Run Code Online (Sandbox Code Playgroud)
所以,如果我想foo()改变x,我必须传递它的参考x.
然后我发现事实并非如此:
sub foo {
$_[0] = 'CHANGED!';
}
my $x = 100;
foo($x);
print $x, "\n"; # prints 'CHANGED!'
Run Code Online (Sandbox Code Playgroud)
数组元素也是如此:
my @arr = (1,2,3);
print $arr[0], "\n"; # prints '1'
foo($arr[0]);
print $arr[0], "\n"; # prints 'CHANGED!'
Run Code Online (Sandbox Code Playgroud)
这有点让我感到惊讶.这是如何运作的?是不是子程序只获取参数的值?它是如何知道它的地址的?
我正在使用网格引擎来运行R脚本.STDERR在这个设置下被认真对待,所以我想保持它干净,只有真正/严重/致命的错误打印到STDERR.
问题是我的R脚本生成了各种STDERR消息,这些消息并不是真正严重的警告...例如,scan似乎打印到STDERR它读取的项目数.
我可以重定向(从R中)STDERR到STDOUT吗?
每当我在eclipse中打开一些帮助时,我会得到一个页面说:
服务器错误.发生以下错误:[code = CANT_CONNECT_LOOPBACK]由于潜在的环回问题无法连接
我正在运行Ubuntu 10.04.
有什么想法可以吗?
更新 一些命令输出(替换了一些私人信息):
$ ifconfig -a
eth0 Link encap:Ethernet HWaddr 00:xx:xx:xx:xx:xx
inet addr:123.12.123.235 Bcast:123.12.456.255 Mask:255.255.254.0
inet6 addr: fe80::xxx:eff:xxxx:xxxx/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1343040 errors:0 dropped:0 overruns:0 frame:0
TX packets:1133672 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:829265876 (829.2 MB) TX bytes:242912202 (242.9 MB)
Memory:f3200000-f3220000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:125 errors:0 dropped:0 overruns:0 frame:0
TX packets:125 errors:0 dropped:0 …Run Code Online (Sandbox Code Playgroud) 我试图在R图中添加标记x轴下方特定x坐标的箭头.我的x轴是y = 0,当我尝试使用负y坐标时arrows,箭头将垂直于x轴,我只得到箭头的边缘(尽管是一些空格,e,g所在绘制x轴标签和刻度线).
我正在使用Perl的Getopt :: Long模块来解析命令行参数.但是,即使缺少某些参数,它似乎也会返回一个真值.有没有办法判断是否是这种情况?
我真的很喜欢我的Perl代码格式化 - 线条缩进等等.问题是我讨厌自己做,而且我真的很喜欢自动格式化程序,它会自动为您执行此操作.
我使用Eclipse和EPIC插件就是这样做的.问题是它不能很好地处理评论.如果注释太长,它不会将它们分成多行,而只是将它们转移到行的开头,因此缩进根本不对.
此外,它使代码行长约80个字符,这有时会使事情变得丑陋.从我上学的那些日子开始,我记得太长的路线很糟糕,但现在我想知道是否最好留下长线原样.
你说什么?关于如何在Eclipse(或一般)下格式化我的Perl代码的任何建议?
UPDATE
Eclipse的EPIC插件也使用了perl整洁.关于如何使perl整齐打破长代码行的任何想法,但如果它不能(例如长字符串)仍然正常缩进它们并允许它们更长(而不是将它们一直缩进到左边,因为默认情况下?
我认为标题是不言自明的.很多时候我有小错别字,在尝试访问未定义的哈希键时会得到意想不到的结果.我知道defined每次访问哈希键之前我都可以添加一些检查,但我想知道是否有更清晰的方法来警告这些情况......
最好,戴夫
我正在使用sort我编写的定制比较子程序:
sub special_compare {
# calc something using $a and $b
# return value
}
my @sorted = sort special_compare @list;
Run Code Online (Sandbox Code Playgroud)
我知道它是最好用的$a,$b它是自动设置的,但有时我想让我special_compare得到更多的参数,即:
sub special_compare {
my ($a, $b, @more) = @_; # or maybe 'my @more = @_;' ?
# calc something using $a, $b and @more
# return value
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?
我刚刚安装了ubuntu 10.10的新副本.我按照brian d foy推荐的大纲安装了perl 5.12.2 ,然后通过调用安装了cpanminus curl -L http://cpanmin.us | perl5.12.2 - --sudo App::cpanminus.
现在,cpan5.12.2工作正常,但每当我尝试使用cpanm5.12.2安装模块时,它都找不到它.例如:
$ sudo cpanm5.12.2 -v File::Copy::Recursive
You have make /usr/bin/make
You have LWP 5.837
You have /bin/tar: tar (GNU tar) 1.23
Copyright (C) 2010 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Written by John Gilmore …Run Code Online (Sandbox Code Playgroud)