gpt4 book ai didi

Perl:为变量/函数设置多个包名?

转载 作者:行者123 更新时间:2023-12-04 16:52:49 24 4
gpt4 key购买 nike

首先,我想说这不是设计问题,而是合规性问题。我知道当前设置存在问题。

在一个模块中,有一些以服务器命名的包,这些包具有许多与该服务器相关的相同变量/函数。看起来这是这样设置的,因此您可以执行以下操作:

  • PRODUCTION_SERVER_NAME::printer()或者TEST_SERVER_NAME::printer()

  • 也许更好的设计可能是这样的:
  • CENTRAL_PACKAGE_NAME::printer('production')CENTRAL_PACKAGE_NAME::printer('test')

  • 无论如何,似乎服务器名称已更改,因此我不想使用实际的服务器名称,而是将软件包重命名为 PRODUCTIONTEST , 不改变仍然引用 PRODUCTION_SERVER_NAME 的其他代码.

    就像是:
    package PRODUCTION, PRODUCTION_SERVER_NAME;  # pseudo code

    我猜某种 glob/import 可能会起作用,但想知道是否已经有类似的东西。我也意识到让命名空间饱和并不是一个好习惯。

    最佳答案

    我不会对设计或任何可能涉及更改客户端代码的内容提供任何评论。 MyTest.pm 中的函数可以使用 MyTest:: 访问或 MyExam:: .但是,您不能使用 use MyExam因为物理文件不在那里。你可以做聪明的@INC技巧,但是当我尝试变得聪明时,我的程序总是崩溃和烧毁。

    我的测试文件

    package MyTest;

    sub hello { 'Hello' }
    sub twoplustwo { 4 }

    for my $sub (qw( hello twoplustwo)) {
    no strict 'refs';
    *{"MyExam::$sub"} = *{"MyTest::$sub"};
    }

    1;

    测试文件
    #!/usr/bin/env perl

    use strict; use warnings;
    use feature 'say';

    use MyTest;

    say MyExam::hello();
    say MyExam::twoplustwo();

    输出:

    你好
    4

    关于Perl:为变量/函数设置多个包名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11229750/

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