我的同事抱怨我的Perl看起来太像C了,这很自然,因为我大部分时间用C编程,而Perl只是一点点.这是我最近的努力.我对易于理解的Perl很感兴趣.我是一个Perl评论家,对于神秘的Perl几乎没有宽容.但考虑到可读性,下面的代码怎么能更多Perlish?
它的目标是进行流量分析,找出哪些IP地址在文件"ips"中给出的范围内.这是我的努力:
#!/usr/bin/perl -w
# Process the files named in the arguments, which will contain lists of IP addresses, and see if
# any of them are in the ranges spelled out in the local file "ip", which has contents of the
# form start-dotted-quad-ip-address,end-dotted-quad-ip_address,stuff_to_be_ignored
use English;
open(IPS,"ips") or die "Can't open 'ips' $OS_ERROR";
# Increment a dotted-quad ip address
# Ignore the fact that part1 could get erroneously large.
sub increment {
$ip = shift;
my ($part_1, $part_2, $part_3, …Run Code Online (Sandbox Code Playgroud) 我在Perl数组中有一个数学集:(1,2,3).我想找到该集合的所有子集:(1),(2),(3),(1,2),(1,3),(2,3).
有3个元素,这不是太难,但如果设置有10个元素,这将变得棘手.
思考?
我开始学习ocaml,我非常欣赏语言中递归的力量.但是,我担心的一件事是堆栈溢出.
如果ocaml使用堆栈进行函数调用,它最终是否会溢出堆栈?例如,如果我有以下功能:
let rec sum x =
if x > 1 then f(x - 1) + x
else x;;
Run Code Online (Sandbox Code Playgroud)
它必须最终导致堆栈溢出.如果我在c ++(使用递归)中做相同的事情,我知道它会溢出.
所以我的问题是,是否有内置的安全措施来防止函数式语言溢出堆栈?如果不是这样,它们是不是没那么有用,因为上面的求和算法,用带有for循环的过程样式编写,可以处理任何数字(不相关的整数溢出)?
stack-overflow functional-programming imperative-programming tail-call-optimization
我有一个 SVN 存储库,其当前结构如下:
最初具有以下结构:
也就是说,该项目被分成两个单独的“子存储库”(或者任何你想称呼的名称)
有什么方法可以将其迁移到 git而不丢失历史记录吗?对于这种情况,svn2git 会比 git-svn 更好吗?还有其他迁移工具吗?
编辑:我按照建议尝试了 git svn clone ,但正如我所想,它没有遵循从旧结构到新结构的转变。它仅导入新结构的修订。
我想在项目中使用 Log4perl,但对某个类(在本例中为 Net::Amazon)禁用它。我以为这会很容易,但不知何故我失败了。
我尝试使用
use Log::Log4perl (:easy_init);
use Net::Amazon;
my $amz = Net::Amazon->new( ... );
my $log = Log::Log4perl->easy_init($DEBUG);
$log = $log->get_logger("Net::Amazon");
$log->level($OFF);
$log = $log->get_logger(__PACKAGE__);
$log->info("Hello World.");
Run Code Online (Sandbox Code Playgroud)
不幸的是,Net::Amazon 的调试消息仍然打印到终端。这是为什么?我在这里做错了什么?
我有一个用Delphi W32编写的应用程序,它处于测试阶段.
在测试PC上,它会在使用几个小时后偶然发出"堆栈溢出"消息.
如何捕获错误并查找原因?
我可以增加堆栈大小吗?
I was reading about Go, and I can see that it's very good and can be a language used by many developers in some months, but I want to decide a simple thing: Learn Go or improve my Python or Ruby knowledge?
Years developing with Python: 1
Years developing with Ruby: 0.3
我不得不深入研究一大堆遗留的ASP代码.为了掌握该平台的最佳实践,您会建议阅读哪些资源(面向对象,i18n的配置,......)
几年前,我读了一篇关于分析大型代码库的简洁方法的文章.
我们的想法是缩小到目前为止压痕和块长度的模式都是真正可见的.
作者写了关于使用非常小的字体打印代码并查看10英尺后面的结果的文章.我相信作者还有一些工具可以重新格式化代码并为这种技术生成图像,从而可以避免使用纸张.
我无法找到合适的搜索查询来实现这一目标.有人有主意吗?
在DBI文档中,这是多次执行查询的推荐代码:
$sth = $dbh->prepare_cached($statement);
$sth->execute(@bind);
$data = $sth->fetchall_arrayref(@attrs);
$sth->finish;
Run Code Online (Sandbox Code Playgroud)
但是,我看到许多*查询方法允许传递一个准备好的和缓存的语句句柄来代替查询字符串,这使得这成为可能:
$sth = $dbh->prepare_cached($statement);
$data = $dbh->selectall_arrayref($sth, \%attrs, @bind);
Run Code Online (Sandbox Code Playgroud)
这种方法有什么问题吗?我还没有看到它在野外使用过.
FWIW,我对这两个实现进行了基准测试.第二种方法fetchall_arrayref在第一次实现selectall_arrayref中使用第二次执行时查询连续两行时,速度略微提高(4%).
*支持此功能的查询方法的完整列表如下:
- selectrow_arrayref - 使用预准备语句的常规方法是fetchrow_arrayref
- selectrow_hashref - ""fetchrow_hashref
- selectall_arrayref - ""fetchall_arrayref
- selectall_hashref - ""fetchall_hashref
- selectcol_arrayref(实际上没有计数,因为它没有使用第一个代码路径的并行方法,如上所述 - 所以使用这个方法的预准备语句的唯一方法是使用上面的第二个代码路径)
perl ×4
refactoring ×2
asp-classic ×1
bind ×1
coding-style ×1
dbi ×1
delphi ×1
git ×1
git-svn ×1
go ×1
log4perl ×1
logging ×1
python ×1
ruby ×1
set ×1
subset ×1
svn ×1
weak-typing ×1