小编Gan*_*ang的帖子

如何从hg repo中安装的库中隔离出来进行测试?

如何使用本地hg repo库来测试已安装的libs的隔离?

安装生产的perl包和本地hg repo具有相同的结构

    +-- lib
        |-- modA.pm
        |-- modB.pm
    +-- bin
        |-- example.pl
    +-- t
        |-- modA.t
        |-- modB.t
Run Code Online (Sandbox Code Playgroud)

安装在库中,并将路径添加到@ PERL5

/nfs_share/perl/
env|grep -i perl
PERL5:/usr/local/perl:/nfs_share/perl
Run Code Online (Sandbox Code Playgroud)

当地的hg回购:

/data/user/hg/perl
Run Code Online (Sandbox Code Playgroud)

modB.pm

#!/usr/bin/perl
use modA;
sub modB_compare{
    my (x,y) = @_;
    # .....
    return x-y;
}
Run Code Online (Sandbox Code Playgroud)

斌/ example.pl

use FindBin qw($Bin);
use lib "${Bin}/lib/";
use modA, modB;
# if this call is from local lib
my $result = modB_compare(x,y);
# if sub being called from production or local hg?
my $result2 = …
Run Code Online (Sandbox Code Playgroud)

perl

12
推荐指数
1
解决办法
244
查看次数

RegEx用于从两端删除非ASCII字符

我必须使用此代码多次循环,是否有更好的方法?

item = '!@#$abc-123-4;5.def)(*&^;\n'
Run Code Online (Sandbox Code Playgroud)

要么

'!@#$abc-123-4;5.def)(*&^;\n_'
Run Code Online (Sandbox Code Playgroud)

要么

'!@#$abc-123-4;5.def)_(*&^;\n_'
Run Code Online (Sandbox Code Playgroud)

我这样的人没有用

item = re.sub('^\W|\W$', '', item)
Run Code Online (Sandbox Code Playgroud)

期望

abc-123-4;5.def
Run Code Online (Sandbox Code Playgroud)

最终目标是[a-zA-Z0-9]在两端之间保留所有字符的同时,仅从两端除去所有不包含的字符。第一个和最后一个字母在上课[a-zA-Z0-9]

python regex

12
推荐指数
3
解决办法
398
查看次数

检查新创建的文件时如何强制刷新NFS缓存?

在Linux NFS共享装载上创建文件时,客户端是Linux或mac机器.文件的存在与否是下一步操作的关键,但检查并不总是返回正确的结果:

例如,我在perl中这样做,这仍然不能正常工作,尤其是mac机器

write_key_file();  # write a file that must be checked before proceeding
Run Code Online (Sandbox Code Playgroud)

当文件存在时,以下检查不能始终返回true

问题 - perl中的此命令未在NFS系统中返回正确的状态:

if( -e $file){}
Run Code Online (Sandbox Code Playgroud)

无法解决的无法解决的问题:

 sleep(5);   # wait 5 seconds
 system("ls -ltr"); # force to cache?
 if(-e $file){}
Run Code Online (Sandbox Code Playgroud)

我不打算检查这样的每个文件,但有几个关键位置,以获得正确的文件状态是很重要的.

我们是否有更好的方法在特定目录上的特定文件上强制刷新nfs缓存?谢谢.

我不确定这是一个XY问题,但有一些最薄弱的问题都可以解决.

A - NFS客户端设置

如果在这个阶段有解决方案,那就太好了!

B - exit_code或返回写入函数的代码

$exit_code = write_key_file();
Run Code Online (Sandbox Code Playgroud)

它的问题,而不是所有的写作都在代码块的范围内.这只能解决部分问题.

C - 禁用特定文件或目录的NFS缓存以进行文件检查

我需要确定这是可能的以及如何?如果没有,为什么?

我对所有可能的解决方案,没有解决方案或其他可能性持开放态度.

linux perl nfs

11
推荐指数
1
解决办法
1万
查看次数

有没有更好的方法来计算字符串中char的出现?

我觉得必须有更好的方法来计算事件,而不是在Linux中的perl,shell中编写sub.

#/usr/bin/perl -w
use strict;
return 1 unless $0 eq __FILE__;
main() if $0 eq __FILE__;
sub main{
    my $str = "ru8xysyyyyyyysss6s5s";
    my $char = "y";
    my $count = count_occurrence($str, $char);
    print "count<$count> of <$char> in <$str>\n";
}
sub count_occurrence{
    my ($str, $char) = @_;
    my $len = length($str);
    $str =~ s/$char//g;
    my $len_new = length($str);
    my $count = $len - $len_new;
    return $count;
}
Run Code Online (Sandbox Code Playgroud)

perl sh

7
推荐指数
3
解决办法
5194
查看次数

perl是否具有取消引用变量的内部函数?

参数传递几次并不罕见.

这是一个有趣的例子,失去报价实际上可以帮助.

第一个abs()返回一个没有引号的变量,使第二个abs返回正确的值.

我的问题是:

perl是否有一个内部函数来取消引用变量,这样我就不用这样编码了?

#!/usr/bin/perl -w
use strict;
my @nums = (
    '-0',
    '-0.0',
    "-0.000",
    qw(-0.000),
    sprintf("%.4f", "-0.0"),
);

print "***use single abs()\n";
foreach my $num(@nums){
    my $number = $num;
    my $abs = abs($number);
    print "<$num> abs <$abs>\n";
}

print "\n***use abs(abs())\n";
foreach my $num(@nums){
    my $abs_abs = abs(abs($num));
    print "<$num> double abs <$abs_abs>\n";
}
Run Code Online (Sandbox Code Playgroud)

系统信息:

uname -r
2.6.32-573.12.1.el6.centos.plus.x86_64
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
Run Code Online (Sandbox Code Playgroud)

屏幕输出:

***use single abs()
<-0> abs <0>
<-0.0> abs <-0>
<-0.000> abs …
Run Code Online (Sandbox Code Playgroud)

perl

3
推荐指数
1
解决办法
519
查看次数

如何知道python中2个列表中相同索引处的值是正面还是负面相同?

2个长度相同的列表,都是float或int类型,正数或负数,不可能为零.我只想知道同一索引中的所有值是否具有相同的方向(正面或负面).这是逻辑,还有更好的方法吗?

def same_direction(list1, list2):
    diff = []
    for i in len(list1):
        if (list1[i] > 0 and list2[i] > 0) or (list1[i]< 0 and list2[i] < 0):
            pass
        else:
            diff.append(i)
    if diff:
        return False
    return True

same_direction([1, 2, 3], [3, 7, 9]) True
same_direction([-1, 2, 3], [1, 2, 3]) False
Run Code Online (Sandbox Code Playgroud)

python

3
推荐指数
1
解决办法
64
查看次数

是否可以在perl中模拟或修补输入参数?

似乎在python中,mock.patch可以修补输入

是否可以在perl中模拟输入参数?如何?这是输出:

not ok 1 - expect: 59, got: 1
Run Code Online (Sandbox Code Playgroud)

我到目前为止的代码:

#!/usr/bin/perl
use Test::More;
use Test::MockObject;
use Date::Calc;

# scope of mocked Date::Calc
{
    my $import;
    my $mock = Test::MockObject->new();
    $mock->fake_module('Date::Calc', import => sub { $import = caller} );
    $mock->fake_new('Date::Calc');
    $mock->mock('Days_in_Year', sub {print "how to mock parameter - month to be 2\n"});
    # is it possible to mock a parameter? how if possible?
    my $days_mock = $mock->Days_in_Year(2015,6);
    ok($days_mock == 59, "expect: 59, got: $days_mock\n");
}

# unmocked module and methods …
Run Code Online (Sandbox Code Playgroud)

perl unit-testing mocking

2
推荐指数
1
解决办法
705
查看次数

vim将代码块移至另一个文件-仅附加

使用vim将代码块从正在编辑的文件移至另一个文件。

有什么花招可以提高生产力吗?

这个问题与下面的网址很接近,但不完全相同

如何从Unix上的文本文件中提取预定范围的行?

# tasks
identity lines range in file_A where you are working
append the code block to file_B
remove the code block from file_A
Run Code Online (Sandbox Code Playgroud)

我以前的常规-4个步骤

# write down line range, exit vim
sed -n 1,33p file.pl >> lib/module.pm
vim lib/module.pm - to check
vim file.pl again to delete the code block
Run Code Online (Sandbox Code Playgroud)

vim

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

在perl中定义数组的首选方法

以下方式在perl中定义数组有什么不同?

哪种方式首选?谢谢

一个

my @eles = (
    "abc",
    "bbc"
);
Run Code Online (Sandbox Code Playgroud)

@eles = ("abc", "bbc");
Run Code Online (Sandbox Code Playgroud)

C

@eles = qw(abc, bbc);
Run Code Online (Sandbox Code Playgroud)

d

@eles = qw(
abc
bbc
);
Run Code Online (Sandbox Code Playgroud)

Ë

@eles = qw{
abc
bbc
};
Run Code Online (Sandbox Code Playgroud)

F

@eles = qw(abc bbc);
Run Code Online (Sandbox Code Playgroud)

perl

0
推荐指数
1
解决办法
103
查看次数

如何访问 argparse 键名而不是值?

Acallee.py有这个Namespace使用它的argparse

parser = Namespace(action='run', action_area='park', severity='high')

In [30]: parser.action
Out[30]: 'run'
Run Code Online (Sandbox Code Playgroud)

如果你在命令行中输入,这应该足够了:

callee.py --run --action_area gym --severity low
Run Code Online (Sandbox Code Playgroud)

如果调用在另一个程序中caller.py,我想这样做:

callee.py sth.run sth.action_area 'gym' sth.severity 'low'
Run Code Online (Sandbox Code Playgroud)

优点是:更规范更容易更新如果 argscallee.py发生变化

我希望sth来自argparse或我不必自己编码的东西。

我可以这样构建sth

class ParserKeys(object):
    def __init__(self, keys):
        self.keys = keys
        for key in keys:
            setattr(self, key, '--{0}'.format(key))

sth = ParserKeys(vars(parser).keys())

In [91]: sth.action
Out[91]: '--action'
Run Code Online (Sandbox Code Playgroud)

我的问题是:有没有一种argparse方法可以让我不必为此构建一个类?

这只是一个解释要求的例子,如何实现这一点不限于argparse如果功能不可用(我认为应该)。

我确信我不是第一个也是最后一个需要此功能的人。我希望这次我解释清楚。

python argparse

-1
推荐指数
1
解决办法
1568
查看次数

标签 统计

perl ×6

python ×3

argparse ×1

linux ×1

mocking ×1

nfs ×1

regex ×1

sh ×1

unit-testing ×1

vim ×1