小编pil*_*row的帖子

嵌入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 sql查询列出上个月的所有日期

伙计们我要求列出上个月的所有日期,如下所示

20101201
20101202
20101203
20101204
20101205
..
..
..
..
..
..
..
..
20101231
Run Code Online (Sandbox Code Playgroud)

如果有任何比这个查询更好的方法,请告诉我.

select TO_CHAR(TRUNC(SYSDATE,'MM')-1,'YYYYMMDD')-(level-1) as 
EACH_DATE from dual A connect by level 
< (TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-1,'DD'))+1)
Run Code Online (Sandbox Code Playgroud)

另请告诉我这个查询的问题,它说"缺少右括号"

SELECT /*+ PARALLEL (A,8) */ /*+ DRIVING_STATE */
   TO_CHAR(TRUNC(TRUNC(SYSDATE,'MM')-1,'MM'),'MONYYYY') "MONTH", TYPE AS "TRAFF",     COLUMN, A_COUN AS "A_COUNT",COST  FROM DATA_P B WHERE  EXISTS  
(  
  select TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-1,'YYYYMMDD')-(level-1))  EACH_DATE 
  from dual A connect by  level < TO_NUMBER(TO_CHAR(TRUNC(SYSDATE,'MM')-1,'DD')+1) 
  WHERE A.EACH_DATE = B.DATE  order by EACH_DATE ASC
 )
Run Code Online (Sandbox Code Playgroud)

强调文字

sql oracle gaps-and-islands

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

如何确定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
查看次数

区分一个子调用与另一个子调用

在下面的片段中,如何区分sub的第二个调用实例和foo第一个?

while ($whatever) {
  foo(); foo();     # foo() and foo() have the same caller package, file, and line
}
Run Code Online (Sandbox Code Playgroud)

caller()返回文件,的超级东西就可以了.我不想使用源过滤器.

背景,或者,这不是一个XY问题吗?

我有一个便利模块,Local :: Thread :: Once,它以OO-ish方式公开像pthread_once/ 一样的功能std::call_once,也作为子程序属性.这些都很容易,因为在任何一种情况下都有一个自然而明确的"once_control"或"once_flag".

但是,还有一个过程接口 - once { ... }当前基于$filename$line返回的序列化caller.像这样的东西:

sub once(&) {
  my $user_routine = shift;
  my (undef, $file, $line) = caller;

  my $once_control = get_a_shared_flag_just_for_this_invocation($file, $line);

  lock($once_control);
  if (! $once_control) { $once_control++; $user_routine->(); }
  return; …
Run Code Online (Sandbox Code Playgroud)

perl multithreading

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

从bash脚本运行时,Perl无法杀死自我pid

以下代码在从终端运行时表现如预期:

perl -e 'kill -2, $$; warn HERE, $/'
Run Code Online (Sandbox Code Playgroud)

它在发送SIGINT到"HERE"之前发送并死亡:

~# perl -e 'kill -2, $$; warn HERE, $/'

~# echo $?
130
~#
Run Code Online (Sandbox Code Playgroud)

问题:从shell脚本运行时,相同的代码无法终止自身PID :

~# cat 1.sh
perl -e 'kill -2, $$; warn HERE, $/'
~#
~# sh 1.sh
HERE
~#
~# echo $?
0
~#
Run Code Online (Sandbox Code Playgroud)

另一方面,用killshell 替换perl的工作正常:

~# cat 2.sh
perl -e 'qx/kill -2 $$/; warn HERE, $/'
~#
~# sh 2.sh
~#
~# echo $?
130 …
Run Code Online (Sandbox Code Playgroud)

terminal perl signals kill-process

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

Firebird 2.1 TIMESTAMP算术和民间间隔

我的理解是,与Interbase v6一致,Firebird 2.5不支持SQL-92 INTERVAL关键字.至少,所以建议这个引用和我重复的SQLCODE -104错误试图INTERVAL在Firebird的isql(1)下运行.

那么,我如何解释我们的民事清算时间的不规则性 - 月份不是一成不变的,也不是节省时间和飞跃调整的日子,更不用说混乱的年份等等 - 执行TIMESTAMP算术时在Firebird 2.1下?

我怎样才能轻易地确定"一个月前"或"一周后"而不是给定TIMESTAMP?"一天后"或"两小时前"怎么样?

sql math firebird timestamp firebird2.1

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

MySQL:查找日期范围之间的缺失日期

我需要一些mysql查询的帮助.我有从2011年1月1日到2011年4月30日的数据的数据库表.应该有每个日期的记录.我需要找出表中是否缺少任何日期.

例如,假设2011年2月2日没有数据.我如何找到该日期?

我将日期存储在名为reportdatetime的列中.日期存储格式为:2011-05-10 0:00:00,即2011年5月5日上午12:00:00.

有什么建议?

mysql date gaps-and-islands

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

调用像ls或rm这样的二进制文件是不是很糟糕的Perl练习?

我发现perl很容易做以下事情:

   print "File not found, valid files are:\n\n".`ls DIRECTORY | grep 'php'`;

   `rm -rf directory`

   my @files_list = split("\n", `ls DIRECTORY | grep 'FILE_NAME_REGEX'`)
Run Code Online (Sandbox Code Playgroud)

做这些事情是不好的做法吗?我觉得这样做要比煞费苦心地实施每件事情要容易得多.我将Perl视为bash的高级版本.

perl multithreading fork process

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

如何将 ruby​​ 包标记为测试版或开发者版本

有没有办法将 ruby​​ 包(特别是 ruby​​gem)标记或版本化为开发人员或测试版?

在 Perl 世界中,有一个广受尊重的约定,即用下划线分隔的小数字表示开发人员版本。也就是说,1.23_01 是普通版本 1.23 之后的开发版本,主要的 Perl 打包软件社区分发站点都知道这一点。ruby 是否有类似的做法?

ruby versioning rubygems

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

两个日期之间的天/月/年

我有两个约会。从其他应用程序的表格中检索的格式为 YYYYMMDD,第二个日期是当地时间,我需要这两个日期之间的天/月/年。

我试过这个

  my $t = Time::Piece->strptime($expi, "%Y %m %d"); #First date
  my $today = Time::Piece->new; #Localtime

  my $diff = $t - $today; 
  print $diff;
Run Code Online (Sandbox Code Playgroud)

但这给了我一些乱码。

变量 $t = 12 月 31 日星期五 00:00:00 9999

变量 $today = 2020 年 2 月 19 日星期三 14:40:55

输出:251820094888

有任何想法吗?提前致谢。

perl time date date-arithmetic

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