小编tjw*_*992的帖子

如何在Perl中定义匿名标量引用?

如何在Perl中正确定义匿名标量引用?

my $scalar_ref = ?;

my $array_ref = [];

my $hash_ref = {};

perl scalar reference

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

如何用连字符连接Perl变量?

我试图用连字符连接两个或三个变量.请查看以下示例.

my $QueueName   = Support;
my $CustomerID  = abc;
my $UserCountry = India;
my $Count       = 12345;

my $Tn = $QueueName.$CustomerID.$UserCountry.$Count;
Run Code Online (Sandbox Code Playgroud)

我得到以下输出:

"$Tn" = SupportabcIndia12345
Run Code Online (Sandbox Code Playgroud)

但我希望这样:

$Tn = Support-abc-India-12345
Run Code Online (Sandbox Code Playgroud)

perl hyphen

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

Perl拆分并丢弃一行中的第一个元素

我有一些数据应该可以很容易地分成哈希.

以下代码旨在将字符串拆分为其对应的键/值对,并将输出存储在散列中.

码:

use Data::Dumper;

# create a test string
my $string = "thing1:data1thing2:data2thing3:data3";

# Doesn't split properly into a hash
my %hash = split m{(thing.):}, $string;
print Dumper(\%hash);
Run Code Online (Sandbox Code Playgroud)

但是,在检查输出时,很明显该代码不能按预期工作.

输出:

$VAR1 = {
    'data3' => undef,
    ''      => 'thing1',
    'data2' => 'thing3',
    'data1' => 'thing2'
};
Run Code Online (Sandbox Code Playgroud)

为了进一步研究这个问题,我将输出分成一个数组,然后打印出结果.

码:

# There is an extra blank element at the start of the array
my @data = split m{(thing.):}, $string;
for my $line (@data) {
    print "LINE: $line\n";
}
Run Code Online (Sandbox Code Playgroud)

输出:

LINE:
LINE: …
Run Code Online (Sandbox Code Playgroud)

arrays perl hash split

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

如何重命名Perl的Moose模块提供的默认构造函数?

有没有办法将Moose提供的默认构造函数重命名为"new"以外的其他东西?

我想这样做是为了使脚本更加用户友好,因为将构造函数命名为不同的东西更有意义(比如"make_thing")

my $object = Class->make_thing();
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?


让我举个例子说明这可能对用户更友好......

假设我正在构建一个处理CVS存储库信息的模块,该模块称为"CVS".我可以使用创建存储库的实例

$repository = CVS->new()

或者,如果我可以更改构造函数的名称,我可以称之为

$repository = CVS->get_repository()

这将使用户更具逻辑意义.

perl constructor moose

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

功能类似于Perl在C++中的AUTOLOAD

Perl允许您使用名为的函数捕获对未定义方法的调用AUTOLOAD.每当你调用一个Perl找不到的AUTOLOAD方法时,它会查找一个方法并调用它.这可以以许多不同的方式使用.有关更多信息,请参阅:AUTOLOAD

最近我进入了C++,很奇怪是否有办法在C++程序中模拟这种功能.我知道C++中的所有东西都需要在编译时定义很多,这使得这个问题变得棘手,但我想必须有一些技术涉及模板或其他一些技巧,至少可以接近.

你能AUTOLOAD在C++中获得最接近Perl的功能是什么?

c++ generic-programming autoload

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

CMake add_library包含其他库

我正在设计可以在我的其他C ++项目中链接的库的集合。为了使该集合易于使用,我希望能够链接到各个库,或者链接到包含所有其他库的一个主库。如何在CMakeLists.txt文件中指定?

例如:

add_library(library1 SHARED
    file1.cpp
    file2.cpp
)

add_library(library2 SHARED
    file3.cpp
    file4.cpp
)

# Define a master library that contains both of the others
add_library(master_library SHARED
    library1
    library2
)
Run Code Online (Sandbox Code Playgroud)

是否有使用CMake获得此功能的正确方法?


编辑:

这个问题不是重复的:CMake:是否可以仅从静态库而不从源构建可执行文件?

这仅与共享库有关,与静态库或可执行文件无关。

c++ cmake shared-libraries

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

重载哈希访问以读/写数据库

我正在尝试使用Perl实现一个非常简单的语法来读取和写入数据库.基本上,最终目标是能够访问数据库中的字段,就好像它们是一个简单的Perl哈希一样.

不幸的是,我试图访问的数据库类型及其API是专有的,因此我无法详细了解如何实际读取和写入数据,只是假设数据库名称是足够的信息来连接.在Perl中需要做的是使这项工作非常通用,因此API信息不应该相关.

首先,我要创建一个简单的数据库对象:

my $database = Database->new('NAME');
Run Code Online (Sandbox Code Playgroud)

然后我想从数据库中读取一个我想要读取的字段名称:

# Read from the database
my $value = $database{'field_name'};

# Write to the database
$database{'field_name'} = $value;
Run Code Online (Sandbox Code Playgroud)

每次从哈希读取数据时,我都希望它调用一个函数来查询数据库并获取值.

每次将数据写入散列时,我都希望它调用一个函数将数据写入数据库.


这是我到目前为止:

Database.pm

package Database;

use overload '%{}' => \&access_data;

sub new {
    my $class = shift;
    my $name  = shift;

    my $self = bless {
        name => $name
    }, $class;

    return $self;
}

sub access_data {
    my $self  = shift;
    my $field = shift;
    my $data  = shift;

    if (defined $data) {
        # …
Run Code Online (Sandbox Code Playgroud)

database perl hash operator-overloading

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

如何确定 CMake 函数的范围,以便无法从文件外部访问它?

我正在尝试在一个相对复杂的项目中编写一些 CMake 代码,并且我有一个内部包含另一个模块的模块。问题是,每当我包含我的模块时,它内部包含的模块中定义的所有功能都在全局级别可用!这实际上是用一堆我没有明确要求的函数污染了我的全局命名空间。

例如:

# CMakeLists.txt

# Include my module
include(MyModule)

# Call a function from my module
my_module_function()

# HERE IS THE PROBLEM -- functions from "AnotherModule" are visible here!
# This call works
another_module_function()
Run Code Online (Sandbox Code Playgroud)

在我的模块内:

# MyModule.cmake

# Include another module
#  - This other module is written and supported by someone else so I can't modify it
#  - No functions from "AnotherModule" will be used outside of "MyModule"
include(AnotherModule)

# Define my function
function(my_module_function)

    # Call …
Run Code Online (Sandbox Code Playgroud)

scope cmake cmake-modules

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

是否可以在拉取过程中从远程使用“.gitignore”?

我遇到过这样的情况:一些之前签入 Git 的文件现在需要被忽略。为了忽略它们,我将文件添加到“.gitignore”并执行了以下操作:

git rm -r --cached .
git add --all
git commit -m "Removed files from git tracking that should be ignored"
git push
Run Code Online (Sandbox Code Playgroud)

现在我遇到一种情况,我需要将这些“.gitignore”更改拉到另一台服务器,但是当我执行此操作时,git pull刚刚添加到“.gitignore”的文件不会被忽略,而是会被完全删除!

我认为发生的事情是在拉取过程中它使用本地“.gitignore”文件,该文件不会忽略这些文件......并且它检测到这些文件不再在 git 中,因此它只是删除它们。如果我手动添加回文件并执行另一个 git pull 然后它开始正常工作(现在正确的“.gitignore”文件位于服务器上。)

有没有办法告诉git pull使用来自远程服务器的“.gitignore”文件而不是本地文件,这样这些文件就可以被正确忽略并且不会在 git pull 上被删除?

git gitignore git-pull

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

静态自由函数线程安全吗?

我正在编写一个多线程程序,并且有一个函数可以从多个线程调用,该函数是 cpp 文件中的静态自由函数。这个函数永远不会从 cpp 文件外部调用,所以我想让它成为静态的,以便它有内部链接。

谷歌搜索我发现很多人说“静态函数不是线程安全的”但是当我去阅读它时,每个人似乎都在谈论静态成员函数,而不是静态自由函数。

静态自由函数线程安全吗(假设它们不访问线程之间的任何共享状态)?

c++ static multithreading

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