小编pil*_*row的帖子

Perl不兼容问题与哈希散列中的每个哈希 - 5.14→5.8.8

以下代码适用于Active Perl 5.14.2:

my %hzones = ();
#%hzones= (
#    'zone1' =>  {
#                  'ns1' => 'ip1',
#                  'ns1' => 'ip2',
#                  },
#    'zone2' =>  {
#                  'ns1' => 'ip1',
#                  'ns2' => 'ip2'
#                  }
#);

foreach my $k1 ( keys %hzones ) {
    debug("# $k1",$d); 
    while ( my ($key, $value) = each($hzones{ $k1 }) ) { # Problem is here   217 
        while ( my ($nsname, $nsip) = each(%$value) ) { 
            debug("## $nsname , $nsip",$d);
    }
    # Creation …
Run Code Online (Sandbox Code Playgroud)

perl

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

python从fd直接读入bytearray

有没有办法从文件描述符(不是类似 IO 的对象)直接读取到bytearray 中

现在我使用一个临时FileIO对象来进行调解,例如:

def fd_readinto(fd, ba):
    fio = io.FileIO(fd, closefd = False)
    return fio.readinto(ba)
Run Code Online (Sandbox Code Playgroud)

python io python-2.7

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

用于反向“使用替代值”的便捷 shell 惯用语

我正在寻找一种快速的 POSIX shell 习惯用法,它可以执行“使用替代值”参数扩展逆操作${VARIABLE:+word}

也就是说,当 VARIABLE 为 null 或未设置时,我想要word,但是当 VARIABLE 不为 null 时,我想要 null 。

例如,如果我有一个 shell 变量 FLAG_VERBOSE,当该变量为非空时,我可以轻松地使通常安静的命令变得更加详细:

some_quiet_cmd ${FLAG_VERBOSE:+ --verbose} arg arg arg ... # verbose only if $FLAG_VERBOSE is set
Run Code Online (Sandbox Code Playgroud)

但是,当我有一个通常喋喋不休的命令时,当未通过提供参数设置 FLAG_VERBOSE 时,我想抑制其通常的喋喋不休:

if [ "$FLAG_VERBOSE" ]; then
  CHATTINESS=
else
  CHATTINESS=--quiet
fi

some_chatty_cmd $CHATTINESS arg arg arg ... # --quiet unless $FLAG_VERBOSE is set
Run Code Online (Sandbox Code Playgroud)

有没有一种方法可以用一个紧凑的表达式来做到这一点?我觉得好像缺少一个假设的参数扩展运算符${VARIABLE:!word}或类似的运算符。(也许我们会称之为“使用互补价值”?)

shell posix sh

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

在 Firebird 中创建一个整数时间戳

我需要一个时间戳作为整数(请不要问我为什么,我完全被这个困扰)。像往常一样,定义是 01.01.1970 之后的秒数。

我的初始值是具有以下格式的字符串

YYYYMMDDHHMMSS(例如 20140108154821)

我已经能够建立一个正常的时间戳

CAST(
(SUBSTRING ( t.thetime FROM 5 FOR 2 )||'/'||SUBSTRING ( t.thetime FROM 7 FOR 2 )||'/'||SUBSTRING ( t.thetime FROM 1 FOR 4 )||' ' ||SUBSTRING ( t.thetime FROM 9 FOR 2 )||':'||SUBSTRING ( t.thetime FROM 11 FOR 2 )||':'||SUBSTRING ( t.thetime FROM 13 FOR 2 )||'.00'
) AS TIMESTAMP)
Run Code Online (Sandbox Code Playgroud)

然后我尝试使用这种技术将其转换为 int

CAST(cast(
(SUBSTRING ( t.thetime FROM 5 FOR 2 )||'/'||SUBSTRING ( t.thetime FROM 7 FOR 2 )||'/'||SUBSTRING ( t.thetime FROM 1 FOR 4 …
Run Code Online (Sandbox Code Playgroud)

sql firebird timestamp casting epoch

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

Firebird中的表名有很多额外的空间

所以,我在Firebird中创建了一个表,使用Python fdb库,如下所示:

>>> import fdb

>>> conn = fdb.connect(...)
>>> sql = "CREATE TABLE test_table(id integer not null)"
>>> cursor = conn.cursor()
>>> cursor.execute(sql)
>>> conn.commit()
Run Code Online (Sandbox Code Playgroud)

但是,当我列出表格时,我得到了这个奇怪的结果:

>>> tables = []
>>> sql = "select rdb$relation_name from rdb$relations 
       where rdb$view_blr is null and (rdb$system_flag is null or rdb$system_flag = 0)"
>>> cursor.execute(sql)
>>> res = cursor.fetchall()
        for r in res:
            tables.append(r[0])
>>> tables
['TEST_TABLE                     ']
Run Code Online (Sandbox Code Playgroud)

到底他妈发生了什么?这个愚蠢的额外空间来自哪里?为什么我的桌子被命名"TEST_TABLE "而不仅仅是"TEST_TABLE"

sql firebird

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

sem_post,信号处理程序和未定义的行为

在信号处理程序中使用sem_post()是否依赖于未定义的行为?

/* 
 * excerpted from the 2017-09-15 Linux man page for sem_wait(3)
 * http://man7.org/linux/man-pages/man3/sem_wait.3.html
 */
...
sem_t sem;
...
static void
handler(int sig)
{
    write(STDOUT_FILENO, "sem_post() from handler\n", 24);
    if (sem_post(&sem) == -1) {
        write(STDERR_FILENO, "sem_post() failed\n", 18);
        _exit(EXIT_FAILURE);
    }
}
Run Code Online (Sandbox Code Playgroud)

信号量sem具有静态存储持续时间.虽然对sem_post()的调用是异步信号安全的,但POSIX.1-2008对信号动作的处理似乎不允许引用该信号量本身:

如果信号处理程序引用除errno之外的任何具有静态存储持续时间的任何对象,而不是通过为声明为volatile sig_atomic_t的对象赋值,或者如果信号处理程序调用此标准中定义的任何函数,则行为未定义[明确的异步信号安全功能]之一.

c posix signals semaphore undefined-behavior

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

Perl:命名捕获组默认为替换字符串

以下 Perl 代码在第二次尝试取消引用捕获组“ext”时失败

use strict;
use warnings;

foreach(qw/2.1 2/){
#foreach(@ARGV){
    my $out= sprintf("%.2f", $_);
    $out =~ s/(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)/$+{'ext'}/g;
    print ":".$out.":\n";
}
Run Code Online (Sandbox Code Playgroud)

如果未定义替换字符串中的捕获组,如何设置默认值?

我确信还有其他几种方法可以解决这个问题,但我相信无法为捕获组设置默认值肯定会再次出现 - 所以请帮我解决这个问题。

跟进:

..我在池上建议的帮助下让它工作,所以它读

$out =~ s{(?:(?<ext>\.[1-9]?)|\.0)0([^\w]|$)}{ $+{'ext'} // "" }eg;
Run Code Online (Sandbox Code Playgroud)

……难道就没有别的办法了吗?特别是因为这只适用于 Perl 的“e”评估正则表达式功能。这也必须以标准正则表达式的方式出现,如果一开始就没有捕获的话,至少要忽略捕获组解除引用,不是吗?

regex perl capture-group

5
推荐指数
2
解决办法
142
查看次数

嵌入Ruby,从C调用函数

我正在编写一个从c调用ruby代码的应用程序.我有点困难,想知道是否有人能指出我的仪式方向.

我目前在我的C.

#include ruby.h

main()
{
  ruby_init();
  rb_require("myRubyFile");
  rb_funcall(rb_module_new(), rb_intern("RubyFunction"), 0, NULL);
}
Run Code Online (Sandbox Code Playgroud)

我的ruby文件与我的c文件位于同一目录中,名为myRubyFile.rb,包含函数RubyFunction()的定义.

这是我实际想要做的事情的减少,只是让其他人更具可读性.我只是需要一些反馈来判断这是否是从我的c文件中调用ruby代码的正确方法.

问候

c ruby linux embedded-ruby

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

Oracle:选择缺少日期

我在一个字段中有一个表(包括其他内容)日期.

我需要获取所有日期的列表,这些日期比最早的日期更新,比最近的日期更早,并且在表格中完全丢失.

所以,如果表包含:

2012-01-02
2012-01-02
2012-01-03
2012-01-05
2012-01-05
2012-01-07
2012-01-08
Run Code Online (Sandbox Code Playgroud)

我想要一个返回的查询:

2012-01-04
2012-01-06
Run Code Online (Sandbox Code Playgroud)

sql oracle gaps-and-islands

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

如何确定perl范围迭代器的最大范围?

我可以超过perl的范围迭代界限,有或没有-Mbigint:

$» perl -E 'say $^V; say for (0..shift)' 1e19
v5.16.2
Range iterator outside integer range at -e line 1.
Run Code Online (Sandbox Code Playgroud)

我怎样才能确定这个上限,而不是直到我超过它?

int perl range limit

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