2

タイプ情報を取得するためのドキュメントには、コードと整数の間のマッピングを取得するための推奨コードが含まれています。

foreach (@{ $DBI::EXPORT_TAGS{sql_types} }) {
    printf "%s=%d\n", $_, &{"DBI::$_"};
}

しかし、perl5.16.2はそれを許可しません:

Can't use string ("DBI::SQL_GUID") as a subroutine ref while "strict refs" in use

厳密な参照をオフにする方法がわかりません。誰かがそうするのは作者の意図ではなかったのではないかと思います。このサブルーチン呼び出しはどのように実行できますか?

4

2 に答える 2

4

これを行うことにより、厳密な'refs'をオフにすることができます

{
    no strict 'refs';
    foreach (@{ $DBI::EXPORT_TAGS{sql_types} }) {
        printf "%s=%d\n", $_, &{"DBI::$_"};
    }   
}
于 2013-02-15T23:02:20.150 に答える
3

なんでno strict 'refs';外に出すの?以下は、より適切な使用法ですno strict 'refs';

for (@{ $DBI::EXPORT_TAGS{sql_types} }) {
    no strict 'refs';
    printf "%s=%d\n", $_, &{"DBI::$_"};
}

(そして、jmcneirneyがマイクロ秒速くなっていることについては何も言わないでください。それは間違っているからです。)

または、\&厳密な参照チェックの対象ではないため、

for (@{ $DBI::EXPORT_TAGS{sql_types} }) {
    my $ref = \&{"DBI::$_"};
    printf "%s=%d\n", $_, $ref->();
}
于 2013-02-15T23:45:44.173 に答える