我有一个Perl脚本(独立程序),它包含一些我想在其他脚本中重用的子程序.由于执行环境的限制,我无法将函数移动到公共.pm
文件.
是否有可能区分脚本是否运行作为一个独立的程序,或者是require
编/ do
由另一个脚本编?
我唯一能找到的就是caller
在顶层使用:当require
ed caller
显示谁加载了模块时,独立程序没有任何调用者.有没有更好的解决方案?
我为一个包含约80个函数的C库编写了一个Perl XS包装器.现在我的一般策略是用C函数替换错误,PL_sv_undef
并且调用Perl代码必须明确检查返回是否不是undef
.(对于某些C函数,它更复杂,因为我将它们的输出转换为HV
/ AV
并使用空列表来报告错误.)
现在,当我开始使用该库编写更大的Perl脚本时,我想简化错误处理并使用例如通常eval {}
/ die
类似异常的机制来处理错误.
目前,我的XS中的简单XSUB看起来像这样:
SV *
simple_function( param1, param2 = 0, param3 = 0)
int param1
int param2
int param3
CODE:
int rc;
rc = simple_function( param1, param2, param3 );
RETVAL = (rc == 0) ? &PL_sv_yes : &PL_sv_undef;
OUTPUT:
RETVAL
Run Code Online (Sandbox Code Playgroud)
我已经看到一些模块有die
关于错误的"RaiseError"的全局标志,但未能找到任何我可以借用的例子.我发现的几个模块处理里面的"RaiseError"标志.pm
,而不是在里面.xs
,因此允许使用Perl die
.在我的情况下,在.pm
很多函数内部很难实现需要特殊的错误检查.这也会导致代码重复,因为检查已经存在于XS内部.
我发现perlxs
/ perlguts
文档中没有任何相关内容.特别是,我已经看到了将呼叫Perl_croak()
在.c
从我的产生.xs
,但未能找到该功能的任何文件.
什么是XS的Perl模拟die
?或者XSUB如何报告Perl运行时函数失败并且没有RETVAL返回?如何正确设置$@ …
我正在开发一个与相机相关的Titanium iOS应用程序.我用过Titanium.Media.showCamera
模块打开相机.
不幸的是,它只给我两个选项,即mediaTypes : [Ti.Media.MEDIA_TYPE_VIDEO, Ti.Media.MEDIA_TYPE_PHOTO]
.
但我正在寻找这些选择:“SQUARE”,”TIME LAPSE”,”SLOW MOTION”,”PANO”
.
我正在使用gcc(GCC)4.8.3 20140911在CentOS 7服务器上测试Linux上的pthread并行代码.
单线程版本很简单,它用于初始化10000*10000矩阵:
int main(int argc)
{
int size = 10000;
int * r = (int*)malloc(size * size * sizeof(int));
for (int i=0; i<size; i++) {
for (int j=0; j<size; j++) {
r[i * size + j] = rand();
}
}
free(r);
}
Run Code Online (Sandbox Code Playgroud)
然后我想看看并行代码是否可以提高性能:
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
int size = 10000;
void *SetOdd(void *param)
{
printf("Enter odd\n");
int * r = (int*)param;
for (int i=0; i<size; i+=2) {
for (int j=0; j<size; j++) {
r[i * …
Run Code Online (Sandbox Code Playgroud) 我遇到了一些奇怪的行为,暗示我不了解Perl脚本执行和初始化顺序的一些基本内容.以下示例:
#!/usr/bin/env perl
use strict;
use warnings;
print &get_keys(), "\n";
use vars qw/%hello/; # same effect with 'my %hello = (...);'
%hello = ( a => 1, b => 2 );
sub get_keys
{
return join(', ', sort keys %hello);
}
Run Code Online (Sandbox Code Playgroud)
打印一个空字符串.这意味着虽然变量已经可见,但由于尚未达到具有赋值的状态,因此它没有值.(使用标量而不是散列会触发有关未初始化变量的警告.)
这是预期的行为吗?
对于RTFM指针我也很高兴.
我正在使用这种方法.如果sql中存在错误,则仅对asset_group的第一个id进行回滚.其余的ID被忽略.我是以正确的方式做到的吗?
my $sql = "sql batch that update and insert depending on the condition";
$dbh->{RaiseError} = 1;
$dbh->{PrintError} = 0;
$dbh->{AutoCommit} = 0;
my $sth = $dbh->prepare($sql);
my @error = ();
my $num = 0;
foreach my $id (@asset_group) {
next if ($id eq '');
eval {
$sth->bind_param(1, $id);
$sth->bind_param(2, $vars{'other_id'});
$sth->execute();
};
if ($@) {
$dbh->rollback();
push @error, $@
} else {
$dbh->commit();
}
}
Run Code Online (Sandbox Code Playgroud) 我已经覆盖了新的,以便我可以跟踪内存分配.附加参数,例如__FILE__
,__LINE__
,模块名等在所添加的#define
.
但是,我想将调用对象的地址添加到参数中,以便在查找问题时可以回溯分配.最简单的方法是将"this"添加到这些附加参数(这意味着调用者的地址被传递到我的自定义alloc内容中).
不幸的是,我们的代码中有很多单例,这意味着一堆静态成员函数调用new.编译器会抛出错误C2671: '...' : static member functions do not have 'this' pointers
是否有一种解决方法,我可以在不使用的情况下获取对象的地址this
,这也可以实现它在静态方法中并传递null说?
或者有可能我的#define
新方法会在静态方法中识别并切换到不同的定义吗?
重要的是我不会影响现有的项目代码 - 我不想强迫开发人员使用像staticnew这样的自定义方法,因为它是在静态方法中 - 他们应该继续使用像普通的新内存和这种内存跟踪的东西一切都在后台进行......
我有一个 .ini 文件,其内容为...
[template]
color1 = 000000
color2 = ff6100
color3 = ff6100
color4 = 000000
Run Code Online (Sandbox Code Playgroud)
一个包含以下内容的文件是从functions.php调用的,它传入2个值:
$myTheme,是正在寻找颜色的主题/模板的名称,$spot,是正在寻找的特定颜色编号(颜色 1-4)
$myTheme = $_REQUEST['theme'];
$spot = $_REQUEST['spot'];
$myColor = get_option($myTheme);
$path_to_ini = "styles/". $myTheme . "/template.ini";
if ($myColor == "") {
if($spot == 1){$myColor = [insert color1 value here];}
if($spot == 2){$myColor = [insert color2 value here];}
if($spot == 3){$myColor = [insert color3 value here];}
if($spot == 4){$myColor = [insert color4 value here];}
}
echo $myColor;
Run Code Online (Sandbox Code Playgroud)
我正在寻求有关如何解析 ini 文件的帮助,以使用 template.ini 文件中的适当颜色填充括号内的数据。
看来,当我们有<iostream>
头,<exception>
和<stdexcept>
头被自动包含.
问题是为什么像cppreference和cplusplus.com这样的参考网站<exception>
在解释异常处理时会包含哪些内容?
是否有必要包括<exception>
或<stdexcept>
?
所以我最近想通过一个Perl程序来提高速度.收集网站列表,我想为每个网址启动一个帖子并获取每个网站的内容,然后在页面上查找公司描述.一旦一个线程找到了结果,或者所有线程都没有,我想退出,写下我的结果,并在我的下一个公司的URL中读取.
我看到的问题是我在创建线程时使用的函数内部使用Perl :: Unsafe :: Signals模块.我需要不安全的信号来中断被"卡住"的正则表达式.然而,这似乎会导致各种问题,主要是程序崩溃并显示错误信息"闹钟".
因此,有没有办法安全地使用Perl :: Unsafe :: Signals和线程?有没有办法通过向函数发送信号以另一种方式超时正则表达式(就像我在下面发送'KILL'信号?)谢谢.
注意:我将代码删除到所有相关部分,如果您需要更多,请告诉我.
use threads ('exit' => 'threads_only');
use threads::shared;
my @descrip;
share(@descrip);
my $lock;
share($lock);
URL:foreach my $url(@unique_urls) {
#skip blank urls
if(!$url) { next URL; }#if
#find description
my $thread = threads->create(\&findCompanyDescription, $PREV_COMPANY, $PREV_BASE_URL, $url);
#while a description has not been found and there are still active threads, keep looking
#there may be a better way to do this, but this seems to work for me
while(!@descrip && threads->list() …
Run Code Online (Sandbox Code Playgroud) 我想使用makefile生成一个头文件abc.h。并且,将此头文件包含在 abc.cpp 文件中,该文件必须从相同的 makefile 构建。
我面临的问题是在编译 .cpp 文件之前它没有生成 .h 文件。因此,我收到了未找到头文件的致命错误。
例如:
//abc.h
#define VAR "My Name"
Run Code Online (Sandbox Code Playgroud)
//abc.cpp
#include "abc.h"
Run Code Online (Sandbox Code Playgroud)
所以,问题是如何在编译源文件之前编写生成头文件的 makefile,这样我就不会出现头文件包含错误?
我已经创建了如下所示的 makefile,但它不会在任何其他编译之前生成文件:
-include dummy
noinst_LTLIBRARIES = window.la
.PHONY: dummy
dummy:
@echo "#define VAR "MYNAME" > abc.h
window_la_SOURCES = \
../src/abc.cpp
window_la_CPPFLAGS = \
-I $(srcdir)/../src/
Run Code Online (Sandbox Code Playgroud)
我想在开始编译 abc.cpp 之前在上面的 makefile 中生成 abc.h。因此,我不会因包含标头而出现致命错误。请建议。
如何在不使用for循环的情况下将值附加到列表中?
我想避免在这段代码中使用循环:
count = []
for i in range(0, 6):
print "Adding %d to the list." % i
count.append(i)
Run Code Online (Sandbox Code Playgroud)
结果必须是:
count = [0, 1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
我尝试了不同的方法,但我无法做到.
这是我的代码:
public class Zad34 {
public static void main (String [] args) {
boolean czyPada = true;
(czyPada = (czyPada = true) ? System.out.println ("Pada.") : System.out.println ("Niepada."));
}
}
Run Code Online (Sandbox Code Playgroud)
我在"?:"
指令行中有一个错误描述为"not a statement"
.
题:
我该怎么做才能改进我的代码?