perl - 在 Perl 中将闭包作为句柄打开

标签 perl closures handles

所以我有了这个疯狂的想法。现在,我正在使用 Text::CSV_XS 在 Word 中生成一个表格,如下所示:

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
use Text::CSV_XS;

# instantiation of word and Text::CSV_XS omitted for clarity
my $select = $word->Selection;
foreach my $row (@rows) { # @rows is an array of arrayrefs
    $csv->combine(@{$row});
    $select->InsertAfter($csv->string);
    $select->InsertParagraphAfter;
}
$select->convertToTable(({'Separator' => wdSeparateByCommas});

但如果我能做这样的事情会更酷:

use Win32::OLE;
use Win32::OLE::Const 'Microsoft Word';
use Text::CSV_XS;

# instantiation of word and Text::CSV_XS omitted for clarity
my $select = $word->Selection;
foreach my $row (@rows) { # @rows is an array of arrayrefs
    $csv->bind_columns($row);
    $csv->print( 
        sub {
            my $something; # Should be the combine()'d string
            $select->InsertAfter($something);
            $select->InsertParagraphAfter;
        },
        undef
    ); 
}
$select->convertToTable(({'Separator' => wdSeparateByCommas});

那么,我的问题是如何从我的第二个代码示例中获取 $something,以及我需要做什么才能使闭包看起来像一个句柄?

最佳答案

Text::CSV::print 不一定需要句柄。文档只是说它需要一些带有 print 方法的东西。

{
    package Print::After::Selection;
    sub new {
        my ($pkg, $selection) = @_;
        my $self = { selection => $selection };
        return bless $self, $pkg;
    }
    sub print {
        my ($self, $string) = @_;
        my $selection = $self->{selection};
        $selection->InsertAfter($string);
        $selection->InsertParagraphAfter;
        return 1;  # return true or Text::CSV will think print failed
    }
}

...
$csv->print( Print::After::Selection->new( $word->Selection ), undef );
...

(未测试)

关于perl - 在 Perl 中将闭包作为句柄打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14651209/

相关文章:

html - 检查字母数字字符并从 HTML 表单获取输入

c++ - DC C++ Windows 句柄

c# - FFplay成功移入我的Winform,如何设置无边框?

regex - 为什么当正则表达式与 * 对组匹配时 Perl 很懒惰?

perl - 从函数返回散列的最佳 Perl 实践是什么?

java - Java 中最接近函数指针的替代品是什么?

closures - 如何测试函数和闭包的相等性?

javascript - 可以从函数原型(prototype)访问私有(private)构造函数范围的变量吗?

java - 如何确定 Java 应用程序速度慢的原因

perl - Perl 是否支持函数调用中的命名参数?