小编mmc*_*coo的帖子

如何在使用模块时找到Perl加载的文件?

在Perl中,当我这样做时use <module name> <ver>;,系统会.pm@INC路径中的某个位置找到库的文件.

是否有可靠的方式来实际加载文件?

perl module

46
推荐指数
6
解决办法
3万
查看次数

在两个文件之间进行排序差异的简单方法是什么?

我有两个文件,其中一些行已更改顺序.我希望能够比较这些.

一个网站建议看起来像这样:

diff <(sort text2) <(sort text1)
Run Code Online (Sandbox Code Playgroud)

但这会产生错误:缺少重定向的名称.

我正在使用tcsh.上面的命令是针对不同的shell吗?

有没有更好的办法?

unix shell

34
推荐指数
5
解决办法
4万
查看次数

如何强制中止"glibc detect***free():无效指针"

在Linux环境中,当获取"glibc***free():无效指针"错误时,如何识别导致它的代码行?

有没有办法强迫中止?我记得有一个ENV var可以控制它吗?

如何在gdb中为glibc错误设置断点?

linux memory-management glibc

16
推荐指数
3
解决办法
3万
查看次数

如何重新定义Perl类方法?

问题"如何在Perl中修补实例方法?" 让我思考.我可以动态重新定义Perl方法吗?说我有这样一个类:

package MyClass;
sub new {
  my $class = shift;
  my $val = shift;
  my $self = { val=> $val};

  bless($self, $class);
  return $self;
};

sub get_val {
  my $self = shift;
  return $self->{val}+10;
}
1;
Run Code Online (Sandbox Code Playgroud)

让我们说添加两个数字真的很贵.

我想修改类,以便$ val + 10仅在我第一次调用该对象上的方法时计算.对该方法的后续调用将返回缓存值.

我可以轻松地修改方法以包含缓存,但是:

  • 我有很多像这样的方法.
  • 我宁愿不弄脏这种方法.

我真正想要做的是指定一个方法列表,我知道它总是为给定的实例返回相同的值.然后我想获取此列表并将其传递给函数以向这些方法添加缓存支持

有没有一种有效的方法来实现这一目标?

跟进.下面的代码有效,但因为use strict不允许字符串引用我不是100%我想成为的地方.

sub myfn {
  printf("computing\n");
  return 10;
}
sub cache_fn {
  my $fnref = shift;

  my $orig = $fnref;
  my $cacheval;

  return sub {
    if (defined($cacheval)) { return $cacheval; }
    $cacheval …
Run Code Online (Sandbox Code Playgroud)

perl

13
推荐指数
2
解决办法
6306
查看次数

如何访问Perl哈希的引用计数?

我正在尝试启用脚本的垃圾收集器来做得更好.它应该能够回收大量的内存,但有些东西正在阻止它.

我已经使用了Devel :: Cycle了一下,这让我更近了但是我不在那里.

如何找出Perl哈希的当前引用计数(我的对象的存储)?

有没有办法跟踪谁持有对象的引用?也许是一种领带说,只要有人指出这个对象,就要记住某个人是谁.

perl

13
推荐指数
2
解决办法
1987
查看次数

为什么perl会将结果转换为结肠?

鉴于此计划:

use strict;
use warnings;

my $zx_size = 32;
my $x = "$zx_size'h0";
Run Code Online (Sandbox Code Playgroud)

Perl告诉我这个:

Name "zx_size::h0" used only once: possible typo at concat.pl line 7.
Use of uninitialized value $zx_size::h0 in string at concat.pl line 7.
Run Code Online (Sandbox Code Playgroud)

为什么?

看来有多种方法可以指定var的命名空间.还有其他人吗?

是否可以关闭此行为?

perl

13
推荐指数
2
解决办法
265
查看次数

如何重新定义内置的Perl函数?

我想做两件事:

在生产代码中,我想重新定义open命令以使我能够添加自动文件记录.我从事数据处理应用程序/流程的工作,作为其中的一部分,用户必须确切地知道正在处理的文件.如果他们使用旧版本的文件,他们找到的一种方法是阅读正在处理的文件列表.

我可以创建一个新的子进程来执行此日志记录并返回一个文件指针,并在我的代码中使用它代替open.

如果我可以重新定义open并且预先存在的代码可以从这种行为中获益,那将是非常好的.我可以这样做吗?

在调试代码中,我想重新定义printf命令以插入注释以及指示生成该行的代码的写入输出.同样,我有一个sub可以选择这样做,但转换我现有的代码是乏味的.

perl redefine

11
推荐指数
2
解决办法
3104
查看次数

如何获得基本的App < - > Emacs集成?

有很多应用程序将Emacs与外部进程集成在一起.GDB是我想到的.我可以通过emacs控制GDB,然后在屏幕上获得反馈.

我想用我的应用程序在那个方向做点什么.

这就是我想要的:

  • 建立我和emacs之间的联系.我可能会开始一个新的emacs进程并将其插入我的GUI
  • 告诉emacs显示文件.(使用emacsclient很容易)
  • 告诉emacs滚动到特定行号和hilite的中心,或者只是将光标移动到那里.
    • 可能真正的问题是如何从外部应用程序发送任意elisp代码以便执行emacs.
    • 我不会说elisp,但这将是一个很好的学习借口
  • 在emacs缓冲区中提供一些可点击的区域,当触发时,它会将消息发送回我的应用程序.
    • 即使缺乏可点击性,发送消息的密钥绑定也是一个开始.(但我知道可点击的东西是可能的,所以我问)

我知道这一切都是可能的(emacs中不可能的东西?),但我不知道从哪里开始谷歌搜索.

emacs elisp

11
推荐指数
4
解决办法
1235
查看次数

如何在Linux中检测文件访问?

我有一堆流量和数据处理应用程序,我偶尔需要监视,这意味着我需要知道他们读取的文件.这主要是为了帮助打包测试用例,但在调试时也很有用.

有没有办法以产生这样一个列表的方式运行可执行文件?

我对此有两点想法:

  1. 我可以调用一个命令,该命令会调用我的应用程序.GDB的一些东西.我调用GDB,给它一个可执行文件的路径和一些参数,GDB为我调用它.也许类似于告诉我如何使用系统资源.
  2. 也许更有趣(但不必要的侧路径)解决方案.
    1. 创建名为libc.so的库,它实现了fopen(和其他一些)
    2. 将LD_LIBRARY_PATH更改为指向新库
    3. 制作真正的libc.so的副本,并在编辑器中重命名fopen(也许是nepof)
    4. 我的库加载副本并根据需要调用重命名的函数以提供fopen功能.
    5. 调用应用程序然后调用我的代理fopen.

备选方案#1肯定是更好的选择,但是对于如何更容易地做#2的评论也是受欢迎的.

c++ linux resources

10
推荐指数
1
解决办法
4845
查看次数

我如何解释Devel :: Leak的输出

Devel::Leak在我的程序中运行,我不理解它给我的输出.

首先,我看到它正在打印一个指针列表.我可以在数组中获取该列表吗?然后我可以使用FindRef来查看它的来源.

例如:

new 0xaebc28 : SV = PVGV(0x30e7e48) at 0xaebc28
  REFCNT = 1
  FLAGS = (GMG,SMG)
  IV = 0
  NV = 0
  PV = 0
  MAGIC = 0x2db7dc0
    MG_VIRTUAL = &PL_vtbl_glob
    MG_TYPE = PERL_MAGIC_glob(*)
    MG_OBJ = 0xaebc28
  NAME = "SUPER::"
  NAMELEN = 7
  GvSTASH = 0x76b228    "IO::File"
  GP = 0x314b170
    SV = 0x30283c8
    REFCNT = 1
    IO = 0x0
    FORM = 0x0  
    AV = 0x0
    HV = 0x301fdb8
    CV = 0x0
    CVGEN = 0x0
    GPFLAGS …
Run Code Online (Sandbox Code Playgroud)

perl

10
推荐指数
1
解决办法
698
查看次数

标签 统计

perl ×6

linux ×2

c++ ×1

elisp ×1

emacs ×1

glibc ×1

memory-management ×1

module ×1

redefine ×1

resources ×1

shell ×1

unix ×1