调试Perl代码(在命令行debbugger中perl -d)的一个令人痛苦的事实是,错误地打印(通过x命令)大型数据结构的内容可以保证终端冻结一半半而数百页的数据印刷.特别是如果这种情况发生在缓慢的网络中.
因此,我希望能够限制x打印的数据量.
我看到两种方法 - 如果有人知道怎么做,我愿意尝试.
限制调试器中任何单个命令打印的数据量.
更好的是,以某种方式用x自定义Perl方法替换内置命令(它将计算数据结构的"大小",并拒绝打印其内容而无需确认).
我特别问"如何x用自定义代码替换" - 构建一个足够好的"数据结构太大"Perl方法是我可以自己做的事情而不需要太多的努力,虽然我看到足够的陷阱阻止"完美"一个来自相当令人沮丧的努力.哎呀,只是做Data :: Dumper-> Dump并获取字符串的长度可能会诀窍:)
请注意,我非常清楚如何通过递归检查数据结构层来手动避免这个问题(例如打印ref,打印键/数组元素的数量等等)......整点都是我希望能够x $huge_pile_of_data不假思索地避免不假思索地打字- 或者在将大量数据填充到应该是标量的错误上磕磕绊绊.
有一个问题已经被问到将负载字节实现到单周期数据路径而不必更改数据存储器,解决方案如下.
替代文字http://img214.imageshack.us/img214/7107/99897101.jpg
这实际上是一个非常现实的问题; 大多数存储器系统完全基于字,并且单个字节通常仅在处理器内部处理.当您在许多计算机上看到"总线错误"时,这通常意味着处理器尝试访问未正确字对齐的内存地址,并且内存系统引发了异常.无论如何,因为字节地址可能不是4的倍数,所以我们不能直接将它们传递给内存.但是,我们仍然可以得到任何字节,因为每个字节都可以在某个字中找到,所有字地址都是4的倍数.所以我们要做的第一件事就是确保我们得到正确的字.如果我们取地址的高30位(即ALUresult [31-2])并将它们与低端的两个0位组合(这就是"左移2"单元真正做的那样),我们有包含所需字节的字的字节地址.这只是字节自己的地址,向下舍入到4的倍数.这个改变意味着lw现在也会将地址舍入到4的倍数,但这没关系,因为非对齐地址无论如何都不适用于lw单元.好的,现在我们从内存中获取数据字.我们如何得到我们想要的字节?好吧,请注意,字中字节的字节偏移量仅由字节地址的低2位给出.因此,我们只需使用这两个位来使用多路复用器从字中选择适当的字节.注意使用big-endian字节编号,适用于MIPS.接下来,我们必须将字节零扩展到32位(即,只将其与高端的24个零组合),因为问题指定这样做.实际上,在这个问题中这是一个轻微的错误:实际上,lbu指令对字节进行零扩展,但是lb符号扩展它.那好吧.最后,我们必须扩展MemtoReg控制的多路复用器以接受一个新输入:lb情况的零扩展字节.MemtoReg控制信号必须加宽到2位.原始的0和1情况分别变为00和01,我们添加了一个新的情况10,仅用于lb的情况.
即使在阅读了解释之后,我也不太明白它是如何工作的,特别是关于左移ALU结果为2会给出字节地址......这怎么可能?所以,如果我想加载一个半字,那么我会做一个左移,我会得到半个字的地址?什么是更好的方法来加载字节,通过修改数据内存加载半字?(上面的问题提出了我们无法修改数据存储器的约束)
如果我的Perl代码有一个生产代码位置和"beta"代码位置(例如生产Perl代码我们/usr/code/scripts,BETA Perl代码在/usr/code/beta/scripts;生产Perl库,/usr/code/lib/perl并且这些库的BETA版本都在/usr/code/beta/lib/perl,对我来说是否有一个简单的方法实现这样的设置?
具体要求是:
代码必须是生产和BETA位置的相同.
为了澄清,为了将任何代码(库或脚本)从BETA推广到生产,需要发生的唯一事情就是cp从BETA向prod位置发出命令 - 文件名和文件内容必须保持相同.
BETA版本的脚本必须调用其他BETA脚本和BETA库(如果存在)或生产库(如果BETA库不存在)
BETA和生产之间的代码路径必须相同,但基目录(/usr/code/vs /usr/code/beta/)除外
这些脚本必须全部相同的基本目录下,但他们可能会在其子目录中的任意深度的水平(这排除了经典use lib "$FindBin::Bin/../lib"的部分解决方案31.13.使用LIB的"的Perl编程")
我将介绍我们如何解决问题作为这个问题的答案,但我想知道是否有更好的方法.
嗨,我对Bash和StackOverflow完全不熟悉.
我需要将一组文件(全部包含在同一文件夹中)移动到目标文件夹,其中可能已存在具有相同名称的文件.
如果存在特定文件,我需要在移动文件之前重命名该文件,方法是在文件名后附加一个增量整数.
应保留扩展名(换句话说,附加的增量整数应该在扩展名之前).文件名可以包含中间的点.
最初,我正在考虑比较两个文件夹以获得现有文件的列表(我用"comm"做了这个),但后来我有点卡住了.我想我只是想以最复杂的方式做事.
有什么暗示以"bash方式"做到这一点?如果它是在bash脚本以外的脚本中完成的,那就没关系.
是否有一种从脚本位置爬上多个目录级别的更简洁的方法.
这就是我现在拥有的.
# get the full path of the script
D=$(cd ${0%/*} && echo $PWD/${0##*/})
D=$(dirname $D)
D=$(dirname $D)
D=$(dirname $D)
# second level parent directory of script
echo $D
Run Code Online (Sandbox Code Playgroud)
我希望找到第n级的简洁方法.除了进行for循环之外的任何想法?
我从来没有处理过R,所以我想知道是否有人可以推荐(从个人经验或某些评论/比较中)哪些Perl/R集成模块被认为是"最佳实践"?理想情况下可以某种方式符合生产准备的东西.
谷歌展示了几个不同的模块,但我不太清楚如何评估选项,以前没有R或统计经验(问题来自一个有兴趣使用R的同事)
我正在C中制作win32程序.
当您运行多个线程,并且其中一个线程正在等待事件时(WaitForSingleObject()例如使用),该线程是否仍然获得其完整的CPU时间片?
换句话说,操作系统是否知道线程不需要其时间片,直到其中一个事件被发出信号?
似乎Embperl 1.x中有一些有效的东西在Embperl 2.x中不再受支持.举个例子:
[+ +]块现在必须包含有效的Perl表达式.Embperl 1.x允许您将多个语句放入这样的块中.出于性能原因,这是不可能的.
鉴于Embperl 1.x代码库非常庞大,是否有自动扫描.epl文件并发现不兼容性的方法?我不关心实现 - 从Embperl 2.0中的一些特殊标志到Perl :: Critic的一些插件都可以.
只要它不是马克1眼球或"切换到Embperl2,看看有什么打破":)
我们有一个字符串 String s = "first.second.third...n-1.n";
Java中哪两种正则表达式方法更有效?
s = s.replaceFirst(".*?\\.", "");
Run Code Online (Sandbox Code Playgroud)
要么
s = s.replaceAll('^[^.]+[.]', '');
Run Code Online (Sandbox Code Playgroud)
他们做同样的事情,但我想知道哪一个更快?
不同之处是:
使用锚定的正则表达式与replaceFirst()仅匹配第一个实例
使用非贪婪*?与非点字符类[^.]
使用\\.文字与[.]字符类.
我更希望得到一个答案,可以对这些分别的表现效果进行基准测试或解释.
我试图在Sybase ASE 12上使用建议的查询,它抱怨语法错误.
SELECT
item,
( SELECT TOP 1 tags.tag
FROM #tags tags
LEFT JOIN t o
ON tags.tag = o.tag
AND o.item_id = n.item_id
WHERE o.tag IS NULL
ORDER BY tags.tag
) 'tag',
value
FROM
t_new n
Run Code Online (Sandbox Code Playgroud)
错误: Incorrect syntax near the keyword 'top'.
但是,当我用MAX()替换(TOP 1 tag... ORDER BY tag)时,同样的查询有效:
SELECT
item,
( SELECT max(tags.tag)
FROM #tags tags
LEFT JOIN t o
ON tags.tag = o.tag
AND o.item_id = n.item_id
WHERE o.tag IS NULL …Run Code Online (Sandbox Code Playgroud)