gpt4 book ai didi

c++ - 如何从 C++ 调用 perl?

转载 作者:行者123 更新时间:2023-11-30 02:45:38 25 4
gpt4 key购买 nike

我有一个 perl 程序来处理特定格式的大型 taxt 文件。我已经从该 perl 准备了一个 exe 文件,它作为 Windows 控制台应用程序工作。但对于学术用途,应用程序需要用更好的 GUI (C++) 编写。
我不可能再用C++重写整个代码(由于时间紧迫)。
有什么方法可以从 C++ GUI 获取文件,使用 perl App(.pl 或 .exe)进行处理,然后再次使用 C++ Window 显示输出。
欢迎任何其他更好的选择。

最佳答案

这是一个使用 Prima 的简单示例选择一个输入文件并对其运行一个简单的报告。

希望它能说明您不需要为了添加一个简单的 GUI 而重写整个 Perl 应用程序。前几个函数执行处理文件和生成报告的实际工作。应用程序的这一部分不需要了解 GUI。

最后一部分提供了一个围绕它的 GUI 包装器。这是应用程序中唯一需要处理 Prima 的部分。

use strict;
use warnings;

# This is the guts of the report.
# It takes a filehandle and does some serious number crunching!
# Just kidding. It counts the occurrences of vowels in a text
# file. But it could be doing any serious reporting work you want.
#
sub get_data_from_file {
my ($fh) = @_;
my %vowels;
while (<$fh>) {
$vowels{uc($_)}++ for /([aeiou])/gi;
}
return \%vowels;
}

# Format report in Pod because personally I find
# that a bit easier to deal with than Prima::TextView.
#
sub format_data_as_pod {
my ($data) = @_;
my $pod = "=pod\n\n";
$pod .= sprintf("B<%s> = %d\n\n", $_, $data->{$_})
for sort keys %$data;
$pod .= "=cut\n\n";
return $pod;
}

# Here's the GUI...
#
MAIN: {
use Prima qw( Application Buttons FileDialog PodView );

my $mw = Prima::MainWindow->new(
text => 'Vowel Counter',
size => [ 300, 200 ],
);

$mw->insert(
Button => (
centered => 1,
text => 'Choose file',
onClick => sub {
my $open = Prima::OpenDialog->new(
filter => [
[ 'Text files' => '*.txt' ],
[ 'All files' => '*' ],
],
);
if ( $open->execute ) {
my $filename = $open->fileName;
open(my $handle, '<', $filename)
or die("Could not open selected file: $?");

my $data = get_data_from_file($handle);
my $report = format_data_as_pod($data);

my $report_window = Prima::Window->create(
text => "Report for $filename",
size => [ 200, 300 ],
);

my $pod = $report_window->insert(
PodView => (
pack => { expand => 1, fill => 'both' },
),
);
$pod->open_read;
$pod->read($report);
$pod->close_read;
}
else {
die("No file chosen");
}
},
),
);

Prima->run;
}

如果您将前两个函数分解到它们自己的模块中,那么不仅提供调用它们的 GUI 应用程序,而且还提供一个替代的基于文本的 UI 供命令行使用,将变得非常容易。

关于c++ - 如何从 C++ 调用 perl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24259994/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com