Groups | Search | Server Info | Login | Register


Groups > perl.module-authors > #3390

Re: Exporter and subroutine circular dependencies between modules

Newsgroups perl.module-authors
Path csiph.com!newsfeed.xs4all.nl!newsfeed8.news.xs4all.nl!bofh.it!nntp.perl.org
Xref csiph.com perl.module-authors:3390
Return-Path <dpchrist@holgerdanske.com>
Mailing-List contact module-authors-help@perl.org; run by ezmlm
Delivered-To mailing list module-authors@perl.org
Received (qmail 11294 invoked from network); 14 Mar 2022 02:13:59 -0000
Received from xx1.develooper.com (147.75.38.233) by x6.develooper.com with SMTP; 14 Mar 2022 02:13:59 -0000
Received from xx1.develooper.com (xx1.develooper.com [127.0.0.1]) by localhost (Postfix) with SMTP id 2F3237C1C1 for <perlmail-module-authors@onion.perl.org>; Sun, 13 Mar 2022 19:13:59 -0700 (PDT)
Received from postfix-inbound-v2-0.inbound.mailchannels.net (inbound-egress-6.mailchannels.net [199.10.31.238]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by xx1.develooper.com (Postfix) with ESMTPS id 70AEA7C18A for <module-authors@perl.org>; Sun, 13 Mar 2022 19:13:51 -0700 (PDT)
Received from inbound-trex-5 (unknown [127.0.0.6]) by postfix-inbound-v2-0.inbound.mailchannels.net (Postfix) with ESMTP id 88B0280082 for <module-authors@perl.org>; Mon, 14 Mar 2022 02:13:50 +0000 (UTC)
ARC-Seal i=1; s=arc-2022; d=mailchannels.net; t=1647224029; a=rsa-sha256; cv=none; b=herLbpow1GH/7rzEMfdR4rKwC5/bqp+pw0ffN1tzM1eSR3ja3QrUSQt6eQhqemP3RJufM6 WIwH+pZVNZ+9huzqWvkyF6if7g1glQv0qDwS8sv3V9Dsqr1ZyK2hawapUJEDxUN3Sct5Xm fDM+UILpACGYLBnz1MZzo4RdVff1pral92Gs+j0Px1OjJV5smdMonxb7xLRA9nVuavL+WW EU5AX9DEI7wEL9AnaoWY6KkCay0W9+l1pwjdZNgpl7+Lyqx2425HhikrKB3HJ1Z6r4BKLW 055DOVzexDS9m62lvxfmumSp2GfM7wa6YrSE0JVjrRLIbdXQGyEhRRghbYbcOQ==
ARC-Message-Signature i=1; a=rsa-sha256; c=relaxed/relaxed; d=mailchannels.net; s=arc-2022; t=1647224029; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references:dkim-signature; bh=+1Tb0+reKN4CfuCV7fEGaCnslPu9zR7N2EVHQQ8DarM=; b=Zz2rcNGTJ+xhKY4Kbar5m/uY0Gtu9N1c1sYxnuP7vyB5OTKdFJDfAHr0+lajRfaM2TM6Zg cTv5yWHITgzhAHzqygYy1t1/16s21VXwRkE9MDoK4ZorBU34pL5tghRvBpQDQNsIFRPhLD f+pyorCo7Ww0coqve30mWq6ByyqxzW7Iw0nTWHWJ3imVUg5oL9sKItlB0+AWmy1IAJCMjQ vq8bSHIEbHpqoIOPT0fl0d0njAEbtGAMMmyFWTzqy7AnDV8CANo4z8F+BPVCSvwh3kVOE4 gUvjO0CGpyTT3jufoRrl5efq7PuN0szN6AbR3cjXuqfoecFzwr0SbSlPp2e0Rg==
ARC-Authentication-Results i=1; inbound-rspamd-68c784b6dd-zs65d; none
Received from holgerdanske.com (holgerdanske.com [184.105.128.27]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384) by 100.114.70.231 (trex/6.5.3); Mon, 14 Mar 2022 02:13:50 +0000
X-Message-ID bLRzhMjCzznsfmETGSjtGstJ
Authentication-Results inbound.mailchannels.net; spf=pass smtp.mailfrom=dpchrist@holgerdanske.com; dkim=pass header.d=holgerdanske.com; dmarc=pass (policy=none; pct=10; status=pass)
Received-SPF pass (inbound-dmarc-688d7756b6-g97k6: domain of holgerdanske.com designates 184.105.128.27 as permitted sender) client-ip=184.105.128.27; envelope-from=dpchrist@holgerdanske.com; helo=holgerdanske.com;
DKIM-Signature v=1; a=rsa-sha256; c=relaxed/relaxed; d=holgerdanske.com; s=nov-20210719-112354; t=1647224024; bh=+1Tb0+reKN4CfuCV7fEGaCnslPu9zR7N2EVHQQ8DarM=; h=Received:Content-Type:Message-ID:Date:MIME-Version:User-Agent: Subject:Content-Language:To:References:From:In-Reply-To; b=SZG0BmssxeJMtF6K0oYVSxdCP8XBo3KukfW9+CEkxtQI6w284oLHXZ/1y0snCd0eP 7wzFEU/u/7XZdvrZ6jJD0OrEvxWu/RBZTim9BW2Ew65vJ3xihkMmI2WCQiPFSXCNBh ze6KZX1ZXGvinvldbkw0r7iTS2EWNOM3sMlivGP4KXV4Pv94rh3QP2o3cGqGcvI+ma xGAe6exy73qBuImyGk66eOkD2ERynylye0xeLKLtU1JskNxA+I9y5o8KEiC9u4aJhw +byOj3ds1WPWOW7ouvhABhI6v0pLj+APzregNGE9zfG7nivNK5rdZt2XzTRRuH5E6W Bh4eGTsreY3FUMa23HL05u13+yd6uniNB4e6z14Aezzkbi7BbFzLD2g0eIws4v1u9A iC59kk1r7zrKtji+zDh32zR3zD41c6fFRxpmiWIHc22fpHP3sx1Rge/CwFEK0lHuUS idSXugDFsKuTwiCsUoDPVlEWq0OVybMnPcAlUMh8oWIKPWxgRUUAEhsbf5v/A0QtcC cCUGomJvjhC6L1a5/aLDV6rw/Mued3E2pKpnSkI2tVe/qH3ANGFadGIaXE5XIhbG6u gBXlGIU0VEZakKiHKtK4xyFbAP7G0gzu80ssoiSy3Vagm+/pUmVglm6V+cMr1K0JZv ToeK/UzI1UuiXLw7dLLY9gjo=
Received from 99.100.19.101 (99-100-19-101.lightspeed.frokca.sbcglobal.net [99.100.19.101]) by holgerdanske.com with ESMTPSA (TLS_AES_128_GCM_SHA256:TLSv1.3:Kx=any:Au=any:Enc=AESGCM(128):Mac=AEAD) (SMTP-AUTH username dpchrist@holgerdanske.com, mechanism PLAIN) for <module-authors@perl.org>; Sun, 13 Mar 2022 19:13:44 -0700
Content-Type multipart/mixed; boundary="------------QhLs0K6PEYjWknw1iqBHJ4fY"
Message-ID <bb7d6bac-4e2b-602e-55f3-e453989fab17@holgerdanske.com> (permalink)
Date Sun, 13 Mar 2022 19:13:44 -0700
MIME-Version 1.0
User-Agent Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.6.0
Subject Re: Exporter and subroutine circular dependencies between modules
Content-Language en-US
To module-authors@perl.org
References <c4a1dd1b-bfa5-2991-271b-360a6bb1ea0a@holgerdanske.com> <a67a9dde-a2af-3842-1590-635a9509f7e9@cfa.harvard.edu> <8e3ac525-d759-365c-8e26-3f395a784308@gmail.com>
In-Reply-To <8e3ac525-d759-365c-8e26-3f395a784308@gmail.com>
X-PMX-Version 5.6.1.2065439, Antispam-Engine: 2.7.2.376379, Antispam-Data: 2022.3.14.15118
X-PMX-Spam Gauge=IIIIIIII, Probability=8%, Report=' HTML_00_01 0.05, HTML_00_10 0.05, ARCHIVE_ATTACHED 0, ATTACHMENT_EXT_X2 0, AUTH_RES_PASS 0, BODY_SIZE_6000_6999 0, BODY_SIZE_7000_LESS 0, DATE_TZ_NA 0, DKIM_ALIGNS 0, DKIM_SIGNATURE 0, GZ_ATTACHED 0, IN_REP_TO 0, LEGITIMATE_SIGNS 0, MSG_THREAD 0, NO_CTA_URI_FOUND 0, NO_URI_FOUND 0, NO_URI_HTTPS 0, REFERENCES 0, SPF_PASS 0, TAR_ATTACHED 0, __ATTACHMENT_NOT_IMG 0, __ATTACHMENT_SIZE_0_10K 0, __AUTH_RES_DKIM_PASS 0, __AUTH_RES_DMARC_PASS 0, __AUTH_RES_PASS 0, __BAT_BOUNDARY 0, __BODY_NO_MAILTO 0, __BOUNCE_CHALLENGE_SUBJ 0, __BOUNCE_NDR_SUBJ_EXEMPT 0, __CT 0, __CTYPE_HAS_BOUNDARY 0, __CTYPE_MULTIPART 0, __CTYPE_MULTIPART_MIXED 0, __DKIM_ALIGNS_1 0, __DKIM_ALIGNS_2 0, __DQ_NEG_HEUR 0, __DQ_NEG_IP 0, __FORWARDED_MSG 0, __FRAUD_MONEY_CURRENCY 0, __FRAUD_MONEY_CURRENCY_DOLLAR 0, __FROM_DOMAIN_NOT_IN_BODY 0, __FROM_NAME_NOT_IN_ADDR 0, __FROM_NAME_NOT_IN_BODY 0, __FUR_HEADER 0, __GZ_ATTACHED1 0, __GZ_ATTACHED2 0, __HAS_ATTACHMENT 0, __HAS_ATTACHMENT1 0, __HAS_ATTACHMENT2 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_REFERENCES 0, __HEADER_ORDER_FROM 0, __HIGHBITS 0, __IN_REP_TO 0, __MAIL_CHAIN 0, __MIME_TEXT_P 0, __MIME_TEXT_P1 0, __MIME_TEXT_P2 0, __MIME_VERSION 0, __MOZILLA_USER_AGENT 0, __NO_HTML_TAG_RAW 0, __RCVD_FROM_DOMAIN 0, __RCVD_PASS 0, __REFERENCES 0, __SANE_MSGID 0, __SUBJ_ALPHA_END 0, __SUBJ_ALPHA_NEGATE 0, __SUBJ_REPLY 0, __TAR_ATTACHED3 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_MAILTO 0, __USER_AGENT 0, __blackholes.mail-abuse.org_ERROR , __zen.spamhaus.org_ERROR '
Approved news@nntp.perl.org
From dpchrist@holgerdanske.com (David Christensen)

Show key headers only | View raw


[Multipart message — attachments visible in raw view] - view raw

On 3/13/22 15:18, Shawn H Corey wrote:
> On 2022-03-13 18:08, Diab Jerius via module-authors wrote:
>>
>>     require Exporter;
>>     our @ISA    = qw( Exporter );
>>     our @EXPORT    = qw( foo )
>>
> I prefer this way:
> 
> # --------------------------------------
> # Exports
> use  Exporter      qw( import );
> our @EXPORT      = qw( foo );
> our @EXPORT_OK   = qw( );
> our %EXPORT_TAGS = (
>      all  => [ @EXPORT, @EXPORT_OK ],
> );
> 
> This automatically creates a tag for `:all`.


Thank you for the reply.  :-)


That approach does not solve the circular dependency issue:

2022-03-13 19:02:58 dpchrist@tinkywinky 
~/samba/dpchrist/sandbox/perl/Exporter-circular-use
$ cat /etc/debian_version ; uname -a ; perl -v | head -n 2
9.13
Linux tinkywinky 4.9.0-17-amd64 #1 SMP Debian 4.9.290-1 (2021-12-12) 
x86_64 GNU/Linux

This is perl 5, version 24, subversion 1 (v5.24.1) built for 
x86_64-linux-gnu-thread-multi

2022-03-13 19:03:22 dpchrist@tinkywinky 
~/samba/dpchrist/sandbox/perl/Exporter-circular-use
$ cvs diff
Index: Bar11.pm
===================================================================
RCS file: 
/var/local/cvs/dpchrist/sandbox/perl/Exporter-circular-use/Bar11.pm,v
retrieving revision 1.1
diff -r1.1 Bar11.pm
9,11c9,14
< require Exporter;
< our @ISA	= qw( Exporter );
< our @EXPORT	= qw( bar );
---
 > use Exporter	   qw( import );
 > our @EXPORT	 = qw( bar );
 > our @EXPORT_OK	 = qw();
 > our %EXPORT_TAGS = (
 >     all  => [ @EXPORT, @EXPORT_OK ],
 > );
Index: Foo11.pm
===================================================================
RCS file: 
/var/local/cvs/dpchrist/sandbox/perl/Exporter-circular-use/Foo11.pm,v
retrieving revision 1.1
diff -r1.1 Foo11.pm
9,11c9,15
< require Exporter;
< our @ISA	= qw( Exporter );
< our @EXPORT	= qw( foo );
---
 > use Exporter	   qw( import );
 > our @EXPORT	 = qw( foo );
 > our @EXPORT_OK   = qw();
 > our %EXPORT_TAGS = (
 >     all  => [ @EXPORT, @EXPORT_OK ],
 > );
 >

2022-03-13 19:03:24 dpchrist@tinkywinky 
~/samba/dpchrist/sandbox/perl/Exporter-circular-use
$ ./foo11
main=7
  foo=6
   bar=5
Undefined subroutine &Bar11::foo called at Bar11.pm line 25.


And, I have doubts about use'ing Exporter and importing Exporter::import().


But, you have reminded me that it is better style to export nothing by 
default (the demo script and modules used @EXPORT for brevity).


So, combining the ideas thus far:

BEGIN { our @EXPORT_OK = qw( foo ) }
use parent 'Exporter';


David



2022-03-13 19:06:46 dpchrist@tinkywinky 
~/samba/dpchrist/sandbox/perl/Exporter-circular-use
$ ./Exporter-circular-use.t
ok 1 - foo00
ok 2 - foo01
ok 3 - foo10
Undefined subroutine &Bar11::foo called at Bar11.pm line 22.
not ok 4 - foo11
#   Failed test 'foo11'
#   at ./Exporter-circular-use.t line 24.
#          got: 'main=7
#  foo=6
#   bar=5
# '
#     expected: 'main=7
#  foo=6
#   bar=5
#    foo=4
#     bar=3
#      foo=2
#       bar=1
# '
Undefined subroutine &Bar12::foo called at Bar12.pm line 23.
not ok 5 - foo12
#   Failed test 'foo12'
#   at ./Exporter-circular-use.t line 24.
#          got: 'main=7
#  foo=6
#   bar=5
# '
#     expected: 'main=7
#  foo=6
#   bar=5
#    foo=4
#     bar=3
#      foo=2
#       bar=1
# '
ok 6 - foo21
ok 7 - foo22
ok 8 - foo33
ok 9 - foo44
1..9
# Looks like you failed 2 tests of 9.

Back to perl.module-authors | Previous | NextPrevious in thread | Next in thread | Find similar


Thread

Exporter and subroutine circular dependencies between modules dpchrist@holgerdanske.com (David Christensen) - 2022-03-13 13:13 -0700
  Re: Exporter and subroutine circular dependencies between modules dpchrist@holgerdanske.com (David Christensen) - 2022-03-13 18:43 -0700
  Re: Exporter and subroutine circular dependencies between modules dpchrist@holgerdanske.com (David Christensen) - 2022-03-13 19:13 -0700
  Re: Exporter and subroutine circular dependencies between modules dpchrist@holgerdanske.com (David Christensen) - 2022-03-13 19:29 -0700
    Re: Exporter and subroutine circular dependencies between modules dpchrist@holgerdanske.com (David Christensen) - 2022-06-05 19:05 -0700

csiph-web