diff --git a/Changelog.ini b/Changelog.ini index 4b24d93..bba8899 100644 --- a/Changelog.ini +++ b/Changelog.ini @@ -3,6 +3,26 @@ Name=Config-Tiny: Changelog.Creator=Module::Metadata::Changes V 2.12 Changelog.Parser=Config::IniFiles V 3.000003 +[V 2.30] +Date=2023-10-12T17:17:08 +Comments= <" ], "dynamic_config" : 1, - "generated_by" : "ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010", + "generated_by" : "ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010", "license" : [ "perl_5" ], @@ -41,8 +41,7 @@ }, "test" : { "requires" : { - "Test::More" : "1.001002", - "Test::Pod" : "1.51" + "Test::More" : "1.001002" } } }, @@ -60,6 +59,6 @@ "web" : "https://github.com/ronsavage/Config-Tiny" } }, - "version" : "2.28", + "version" : "2.30", "x_serialization_backend" : "JSON::PP version 4.06" } diff --git a/META.yml b/META.yml index d2b39f5..d4afd69 100644 --- a/META.yml +++ b/META.yml @@ -4,11 +4,10 @@ author: - 'Adam Kennedy ' build_requires: Test::More: '1.001002' - Test::Pod: '1.51' configure_requires: ExtUtils::MakeMaker: '0' dynamic_config: 1 -generated_by: 'ExtUtils::MakeMaker version 7.62, CPAN::Meta::Converter version 2.150010' +generated_by: 'ExtUtils::MakeMaker version 7.70, CPAN::Meta::Converter version 2.150010' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html @@ -28,5 +27,5 @@ resources: bugtracker: https://github.com/ronsavage/Config-Tiny/issues license: http://opensource.org/licenses/Perl repository: https://github.com/ronsavage/Config-Tiny.git -version: '2.28' +version: '2.30' x_serialization_backend: 'CPAN::Meta::YAML version 0.018' diff --git a/Makefile.PL b/Makefile.PL index f930d9b..f47f640 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -45,7 +45,6 @@ my(%params) = TEST_REQUIRES => { 'Test::More' => '1.001002', - 'Test::Pod' => '1.51', }, VERSION_FROM => 'lib/Config/Tiny.pm', ); diff --git a/debian/README.Debian b/debian/README.Debian deleted file mode 100644 index 8f8bc0b..0000000 --- a/debian/README.Debian +++ /dev/null @@ -1,8 +0,0 @@ -libconfig-tiny-perl for Debian - -Please edit this to provide information specific to -this libconfig-tiny-perl Debian package. - - (Automatically generated by debmake Version 4.3.1) - - -- denghao Fri, 02 Sep 2022 11:35:22 +0300 diff --git a/debian/changelog b/debian/changelog deleted file mode 100644 index 53444c6..0000000 --- a/debian/changelog +++ /dev/null @@ -1,11 +0,0 @@ -libconfig-tiny-perl (2.28-ok2) yangtze; urgency=medium - - * Modify debian/control. - - -- denghao Fri, 16 Sep 2022 10:44:14 +0300 - -libconfig-tiny-perl (2.28-ok1) yangtze; urgency=medium - - * Build for openkylin. - - -- denghao Tue, 23 Aug 2022 15:51:17 +0300 diff --git a/debian/control b/debian/control deleted file mode 100644 index c2c9f37..0000000 --- a/debian/control +++ /dev/null @@ -1,27 +0,0 @@ -Source: libconfig-tiny-perl -Section: perl -Priority: optional -Maintainer: OpenKylin Developers -Build-Depends: debhelper-compat (=13) -Build-Depends-Indep: libtest-simple-perl , - perl -Testsuite: autopkgtest-pkg-perl -Standards-Version: 4.6.0 -Vcs-Browser: https://gitee.com/openkylin/libconfig-tiny-perl -Vcs-Git: https://gitee.com/openkylin/libconfig-tiny-perl.git -Homepage: https://metacpan.org/release/Config-Tiny -Rules-Requires-Root: no - -Package: libconfig-tiny-perl -Architecture: all -Depends: ${misc:Depends}, - ${perl:Depends} -Description: Read/Write .ini style files with as little code as possible - Config::Tiny is a perl class to read and write .ini style configuration files - with as little code as possible, reducing load time and memory overhead. - . - This module is primarily for reading human written files, and anything - written into shouldn't need to have documentation/comments. If something with - more power is needed, move up to Config::Simple, Config::General or one of - the many other Config:: modules. Config::Tiny does not preserve comments, - whitespace, or the order of the file contents. diff --git a/debian/copyright b/debian/copyright deleted file mode 100644 index 7a1c2c5..0000000 --- a/debian/copyright +++ /dev/null @@ -1,427 +0,0 @@ -Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ -Upstream-Name: libconfig-tiny-perl -Source: -# -# Please double check copyright with the licensecheck(1) command. - -Files: .travis.yml - Changelog.ini - Changes - MANIFEST - MANIFEST.SKIP - META.json - META.yml - Makefile.PL - README - t/0 - t/00.versions.t - t/00.versions.tx - t/01.compile.t - t/02.main.t - t/03.read.string.t - t/04.utf8.t - t/04.utf8.txt - t/05.zero.t - t/06.repeat.key.t - t/07.trailing.comment.t - t/08.constructor.t - t/test.conf - xt/author/pod.t - xt/meta.t - xt/pmv.t -Copyright: __NO_COPYRIGHT_NOR_LICENSE__ -License: __NO_COPYRIGHT_NOR_LICENSE__ - -Files: lib/Config/Tiny.pm -Copyright: 2002-2011 Adam Kennedy. -License: Perl - This program is free software; you can redistribute - it and/or modify it under the same terms as Perl itself. - . - The full text of the license can be found in the - LICENSE file included with this module. - -#---------------------------------------------------------------------------- -# Files marked as NO_LICENSE_TEXT_FOUND may be covered by the following -# license/copyright files. - -#---------------------------------------------------------------------------- -# License file: LICENSE - Terms of Perl itself - . - a) the GNU General Public License as published by the Free - Software Foundation; either version 1, or (at your option) any - later version, or - b) the "Artistic License" - . - ---------------------------------------------------------------------------- - . - The General Public License (GPL) - Version 2, June 1991 - . - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute - verbatim copies of this license document, but changing it is not allowed. - . - Preamble - . - The licenses for most software are designed to take away your freedom to share - and change it. By contrast, the GNU General Public License is intended to - guarantee your freedom to share and change free software--to make sure the - software is free for all its users. This General Public License applies to most of - the Free Software Foundation's software and to any other program whose - authors commit to using it. (Some other Free Software Foundation software is - covered by the GNU Library General Public License instead.) You can apply it to - your programs, too. - . - When we speak of free software, we are referring to freedom, not price. Our - General Public Licenses are designed to make sure that you have the freedom - to distribute copies of free software (and charge for this service if you wish), that - you receive source code or can get it if you want it, that you can change the - software or use pieces of it in new free programs; and that you know you can do - these things. - . - To protect your rights, we need to make restrictions that forbid anyone to deny - you these rights or to ask you to surrender the rights. These restrictions - translate to certain responsibilities for you if you distribute copies of the - software, or if you modify it. - . - For example, if you distribute copies of such a program, whether gratis or for a - fee, you must give the recipients all the rights that you have. You must make - sure that they, too, receive or can get the source code. And you must show - them these terms so they know their rights. - . - We protect your rights with two steps: (1) copyright the software, and (2) offer - you this license which gives you legal permission to copy, distribute and/or - modify the software. - . - Also, for each author's protection and ours, we want to make certain that - everyone understands that there is no warranty for this free software. If the - software is modified by someone else and passed on, we want its recipients to - know that what they have is not the original, so that any problems introduced by - others will not reflect on the original authors' reputations. - . - Finally, any free program is threatened constantly by software patents. We wish - to avoid the danger that redistributors of a free program will individually obtain - patent licenses, in effect making the program proprietary. To prevent this, we - have made it clear that any patent must be licensed for everyone's free use or - not licensed at all. - . - The precise terms and conditions for copying, distribution and modification - follow. - . - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND - MODIFICATION - . - 0. This License applies to any program or other work which contains a notice - placed by the copyright holder saying it may be distributed under the terms of - this General Public License. The "Program", below, refers to any such program - or work, and a "work based on the Program" means either the Program or any - derivative work under copyright law: that is to say, a work containing the - Program or a portion of it, either verbatim or with modifications and/or translated - into another language. (Hereinafter, translation is included without limitation in - the term "modification".) Each licensee is addressed as "you". - . - Activities other than copying, distribution and modification are not covered by - this License; they are outside its scope. The act of running the Program is not - restricted, and the output from the Program is covered only if its contents - constitute a work based on the Program (independent of having been made by - running the Program). Whether that is true depends on what the Program does. - . - 1. You may copy and distribute verbatim copies of the Program's source code as - you receive it, in any medium, provided that you conspicuously and appropriately - publish on each copy an appropriate copyright notice and disclaimer of warranty; - keep intact all the notices that refer to this License and to the absence of any - warranty; and give any other recipients of the Program a copy of this License - along with the Program. - . - You may charge a fee for the physical act of transferring a copy, and you may at - your option offer warranty protection in exchange for a fee. - . - 2. You may modify your copy or copies of the Program or any portion of it, thus - forming a work based on the Program, and copy and distribute such - modifications or work under the terms of Section 1 above, provided that you also - meet all of these conditions: - . - a) You must cause the modified files to carry prominent notices stating that you - changed the files and the date of any change. - . - b) You must cause any work that you distribute or publish, that in whole or in - part contains or is derived from the Program or any part thereof, to be licensed - as a whole at no charge to all third parties under the terms of this License. - . - c) If the modified program normally reads commands interactively when run, you - must cause it, when started running for such interactive use in the most ordinary - way, to print or display an announcement including an appropriate copyright - notice and a notice that there is no warranty (or else, saying that you provide a - warranty) and that users may redistribute the program under these conditions, - and telling the user how to view a copy of this License. (Exception: if the - Program itself is interactive but does not normally print such an announcement, - your work based on the Program is not required to print an announcement.) - . - These requirements apply to the modified work as a whole. If identifiable - sections of that work are not derived from the Program, and can be reasonably - considered independent and separate works in themselves, then this License, - and its terms, do not apply to those sections when you distribute them as - separate works. But when you distribute the same sections as part of a whole - which is a work based on the Program, the distribution of the whole must be on - the terms of this License, whose permissions for other licensees extend to the - entire whole, and thus to each and every part regardless of who wrote it. - . - Thus, it is not the intent of this section to claim rights or contest your rights to - work written entirely by you; rather, the intent is to exercise the right to control - the distribution of derivative or collective works based on the Program. - . - In addition, mere aggregation of another work not based on the Program with the - Program (or with a work based on the Program) on a volume of a storage or - distribution medium does not bring the other work under the scope of this - License. - . - 3. You may copy and distribute the Program (or a work based on it, under - Section 2) in object code or executable form under the terms of Sections 1 and 2 - above provided that you also do one of the following: - . - a) Accompany it with the complete corresponding machine-readable source - code, which must be distributed under the terms of Sections 1 and 2 above on a - medium customarily used for software interchange; or, - . - b) Accompany it with a written offer, valid for at least three years, to give any - third party, for a charge no more than your cost of physically performing source - distribution, a complete machine-readable copy of the corresponding source - code, to be distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - . - c) Accompany it with the information you received as to the offer to distribute - corresponding source code. (This alternative is allowed only for noncommercial - distribution and only if you received the program in object code or executable - form with such an offer, in accord with Subsection b above.) - . - The source code for a work means the preferred form of the work for making - modifications to it. For an executable work, complete source code means all the - source code for all modules it contains, plus any associated interface definition - files, plus the scripts used to control compilation and installation of the - executable. However, as a special exception, the source code distributed need - not include anything that is normally distributed (in either source or binary form) - with the major components (compiler, kernel, and so on) of the operating system - on which the executable runs, unless that component itself accompanies the - executable. - . - If distribution of executable or object code is made by offering access to copy - from a designated place, then offering equivalent access to copy the source - code from the same place counts as distribution of the source code, even though - third parties are not compelled to copy the source along with the object code. - . - 4. You may not copy, modify, sublicense, or distribute the Program except as - expressly provided under this License. Any attempt otherwise to copy, modify, - sublicense or distribute the Program is void, and will automatically terminate - your rights under this License. However, parties who have received copies, or - rights, from you under this License will not have their licenses terminated so long - as such parties remain in full compliance. - . - 5. You are not required to accept this License, since you have not signed it. - However, nothing else grants you permission to modify or distribute the Program - or its derivative works. These actions are prohibited by law if you do not accept - this License. Therefore, by modifying or distributing the Program (or any work - based on the Program), you indicate your acceptance of this License to do so, - and all its terms and conditions for copying, distributing or modifying the - Program or works based on it. - . - 6. Each time you redistribute the Program (or any work based on the Program), - the recipient automatically receives a license from the original licensor to copy, - distribute or modify the Program subject to these terms and conditions. You - may not impose any further restrictions on the recipients' exercise of the rights - granted herein. You are not responsible for enforcing compliance by third parties - to this License. - . - 7. If, as a consequence of a court judgment or allegation of patent infringement - or for any other reason (not limited to patent issues), conditions are imposed on - you (whether by court order, agreement or otherwise) that contradict the - conditions of this License, they do not excuse you from the conditions of this - License. If you cannot distribute so as to satisfy simultaneously your obligations - under this License and any other pertinent obligations, then as a consequence - you may not distribute the Program at all. For example, if a patent license would - not permit royalty-free redistribution of the Program by all those who receive - copies directly or indirectly through you, then the only way you could satisfy - both it and this License would be to refrain entirely from distribution of the - Program. - . - If any portion of this section is held invalid or unenforceable under any particular - circumstance, the balance of the section is intended to apply and the section as - a whole is intended to apply in other circumstances. - . - It is not the purpose of this section to induce you to infringe any patents or other - property right claims or to contest validity of any such claims; this section has - the sole purpose of protecting the integrity of the free software distribution - system, which is implemented by public license practices. Many people have - made generous contributions to the wide range of software distributed through - that system in reliance on consistent application of that system; it is up to the - author/donor to decide if he or she is willing to distribute software through any - other system and a licensee cannot impose that choice. - . - This section is intended to make thoroughly clear what is believed to be a - consequence of the rest of this License. - . - 8. If the distribution and/or use of the Program is restricted in certain countries - either by patents or by copyrighted interfaces, the original copyright holder who - places the Program under this License may add an explicit geographical - distribution limitation excluding those countries, so that distribution is permitted - only in or among countries not thus excluded. In such case, this License - incorporates the limitation as if written in the body of this License. - . - 9. The Free Software Foundation may publish revised and/or new versions of the - General Public License from time to time. Such new versions will be similar in - spirit to the present version, but may differ in detail to address new problems or - concerns. - . - Each version is given a distinguishing version number. If the Program specifies a - version number of this License which applies to it and "any later version", you - have the option of following the terms and conditions either of that version or of - any later version published by the Free Software Foundation. If the Program does - not specify a version number of this License, you may choose any version ever - published by the Free Software Foundation. - . - 10. If you wish to incorporate parts of the Program into other free programs - whose distribution conditions are different, write to the author to ask for - permission. For software which is copyrighted by the Free Software Foundation, - write to the Free Software Foundation; we sometimes make exceptions for this. - Our decision will be guided by the two goals of preserving the free status of all - derivatives of our free software and of promoting the sharing and reuse of - software generally. - . - NO WARRANTY - . - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS - NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY - APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE - COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM - "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR - IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE - ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE - PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, - YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR - CORRECTION. - . - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED - TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY - WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS - PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY - GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES - ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM - (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING - RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD - PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY - OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS - BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - . - END OF TERMS AND CONDITIONS - . - . - ---------------------------------------------------------------------------- - . - The Artistic License - . - Preamble - . - The intent of this document is to state the conditions under which a Package - may be copied, such that the Copyright Holder maintains some semblance of - artistic control over the development of the package, while giving the users of the - package the right to use and distribute the Package in a more-or-less customary - fashion, plus the right to make reasonable modifications. - . - Definitions: - . - - "Package" refers to the collection of files distributed by the Copyright - Holder, and derivatives of that collection of files created through textual - modification. - - "Standard Version" refers to such a Package if it has not been modified, - or has been modified in accordance with the wishes of the Copyright - Holder. - - "Copyright Holder" is whoever is named in the copyright or copyrights for - the package. - - "You" is you, if you're thinking about copying or distributing this Package. - - "Reasonable copying fee" is whatever you can justify on the basis of - media cost, duplication charges, time of people involved, and so on. (You - will not be required to justify it to the Copyright Holder, but only to the - computing community at large as a market that must bear the fee.) - - "Freely Available" means that no fee is charged for the item itself, though - there may be fees involved in handling the item. It also means that - recipients of the item may redistribute it under the same conditions they - received it. - . - 1. You may make and give away verbatim copies of the source form of the - Standard Version of this Package without restriction, provided that you duplicate - all of the original copyright notices and associated disclaimers. - . - 2. You may apply bug fixes, portability fixes and other modifications derived from - the Public Domain or from the Copyright Holder. A Package modified in such a - way shall still be considered the Standard Version. - . - 3. You may otherwise modify your copy of this Package in any way, provided - that you insert a prominent notice in each changed file stating how and when - you changed that file, and provided that you do at least ONE of the following: - . - a) place your modifications in the Public Domain or otherwise - make them Freely Available, such as by posting said modifications - to Usenet or an equivalent medium, or placing the modifications on - a major archive site such as ftp.uu.net, or by allowing the - Copyright Holder to include your modifications in the Standard - Version of the Package. - . - b) use the modified Package only within your corporation or - organization. - . - c) rename any non-standard executables so the names do not - conflict with standard executables, which must also be provided, - and provide a separate manual page for each non-standard - executable that clearly documents how it differs from the Standard - Version. - . - d) make other distribution arrangements with the Copyright Holder. - . - 4. You may distribute the programs of this Package in object code or executable - form, provided that you do at least ONE of the following: - . - a) distribute a Standard Version of the executables and library - files, together with instructions (in the manual page or equivalent) - on where to get the Standard Version. - . - b) accompany the distribution with the machine-readable source of - the Package with your modifications. - . - c) accompany any non-standard executables with their - corresponding Standard Version executables, giving the - non-standard executables non-standard names, and clearly - documenting the differences in manual pages (or equivalent), - together with instructions on where to get the Standard Version. - . - d) make other distribution arrangements with the Copyright Holder. - . - 5. You may charge a reasonable copying fee for any distribution of this Package. - You may charge any fee you choose for support of this Package. You may not - charge a fee for this Package itself. However, you may distribute this Package in - aggregate with other (possibly commercial) programs as part of a larger - (possibly commercial) software distribution provided that you do not advertise - this Package as a product of your own. - . - 6. The scripts and library files supplied as input to or produced as output from - the programs of this Package do not automatically fall under the copyright of this - Package, but belong to whomever generated them, and may be sold - commercially, and may be aggregated with this Package. - . - 7. C or perl subroutines supplied by you and linked into this Package shall not - be considered part of this Package. - . - 8. The name of the Copyright Holder may not be used to endorse or promote - products derived from this software without specific prior written permission. - . - 9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR - IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED - WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR - PURPOSE. - . - The End - . - . diff --git a/debian/patches/series b/debian/patches/series deleted file mode 100644 index 4a97dfa..0000000 --- a/debian/patches/series +++ /dev/null @@ -1 +0,0 @@ -# You must remove unused comment lines for the released package. diff --git a/debian/rules b/debian/rules deleted file mode 100755 index 2d33f6a..0000000 --- a/debian/rules +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/make -f - -%: - dh $@ diff --git a/debian/source/format b/debian/source/format deleted file mode 100644 index 89ae9db..0000000 --- a/debian/source/format +++ /dev/null @@ -1 +0,0 @@ -3.0 (native) diff --git a/debian/upstream/metadata b/debian/upstream/metadata deleted file mode 100644 index 07db665..0000000 --- a/debian/upstream/metadata +++ /dev/null @@ -1,6 +0,0 @@ ---- -Archive: CPAN -Bug-Database: https://github.com/ronsavage/Config-Tiny/issues -Bug-Submit: https://github.com/ronsavage/Config-Tiny/issues/new -Repository: https://github.com/ronsavage/Config-Tiny.git -Repository-Browse: https://github.com/ronsavage/Config-Tiny diff --git a/debian/watch b/debian/watch deleted file mode 100644 index 0dfd3d2..0000000 --- a/debian/watch +++ /dev/null @@ -1,2 +0,0 @@ -version=4 -https://metacpan.org/release/Config-Tiny .*/Config-Tiny-v?@ANY_VERSION@@ARCHIVE_EXT@$ diff --git a/lib/Config/Tiny.pm b/lib/Config/Tiny.pm index 54776b4..da6fc3f 100644 --- a/lib/Config/Tiny.pm +++ b/lib/Config/Tiny.pm @@ -7,7 +7,7 @@ use 5.008001; # For the utf8 stuff. # Warning: There is another version line, in t/02.main.t. -our $VERSION = '2.28'; +our $VERSION = '2.30'; BEGIN { $Config::Tiny::errstr = ''; @@ -84,6 +84,14 @@ sub read_string if ( /^\s*([^=]+?)\s*=\s*(.*?)\s*$/ ) { + if ( substr($1, -2) eq '[]' ) + { + my $k = substr $1, 0, -2; + $self->{$ns}->{$k} ||= []; + return $self -> _error ("Can't mix arrays and scalars at line $counter" ) unless ref $self->{$ns}->{$k} eq 'ARRAY'; + push @{$self->{$ns}->{$k}}, $2; + next; + } $self->{$ns}->{$1} = $2; next; @@ -144,6 +152,13 @@ sub write_string { return $self->_error("Illegal newlines in property '$section.$property'") if $block->{$property} =~ /(?:\012|\015)/s; + if (ref $block->{$property} eq 'ARRAY') { + for my $element ( @{$block->{$property}} ) + { + $contents .= "${property}[]=$element\n"; + } + next; + } $contents .= "$property=$block->{$property}\n"; } } @@ -174,8 +189,10 @@ Config::Tiny - Read/Write .ini style files with as little code as possible [section] one=twp + greetings[]=Hello three= four Foo =Bar + greetings[]=World! empty= # In your program @@ -245,6 +262,8 @@ Files are the same format as for MS Windows C<*.ini> files. For example: var1=value1 var2=value2 +But see also ARRAY SYNTAX just below. + If a property is outside of a section at the beginning of a file, it will be assigned to the C<"root section">, available at C<$Config-E{_}>. @@ -256,6 +275,95 @@ and the ordering of your config file elements are discarded. If you need to keep the human elements of a config when writing back, upgrade to something better, this module is not for you. +=head1 ARRAY SYNTAX + +=head2 Basic Syntax + +As of V 2.30, this module supports the case of a key having an array of values. + +Sample data (copied from t/test.conf): + + root=something + + [section] + greetings[]=Hello + one=two + Foo=Bar + greetings[]=World! + this=Your Mother! + blank= + + [Section Two] + something else=blah + remove = whitespace + +Note specifically that the key name greetings has the empty bracket pair [] as a suffix. +This tells the code that it is not to overwrite the 1st value with the 2nd value, but +rather to push these values onto a stack called 'greetings'. + +Note also that you could have used: + + [section] + greetings[]=Hello + greetings[]=World! + one=two + Foo=Bar + this=Your Mother! + blank= + +Clearly, the 2 lines using greetings[] do not have to be side-by-side. + +If you use e.g. Data::Dumper::Concise to give you a Dumper() function (not method), then +'say Dumper($Config)' the output will look like: + + bless( { + "Section Two" => { + remove => "whitespace", + "something else" => "blah", + }, + _ => { + root => "something", + }, + section => { + Foo => "Bar", + blank => "", + greetings => [ + "Hello", + "World!", + ], + one => "two", + this => "Your Mother!", + }, + }, 'Config::Tiny' ) + +You can see this structure in t/02.main.t starting at line 45. Observe too that the key names are +reported in alphabetical order (by the module Data::Dumper::Concise) despite the differing order +in the setting of these keys, and that the array syntax result is that greetings has an array +for a value. + +To access these values, use code like this: + + Dumper($Config); + Dumper($Config->{section}); + Dumper($Config->{section}->{greetings}); + Dumper($Config->{section}->{greetings}->[0]); + Dumper($Config->{section}->{greetings}->[1]); + Dumper(ref $Config); + +=head2 Warning + +$Config is a blessed value, which means it is accessed differently than if it was +a hash ref. The latter could be accessed as: + + Dumper($$Config{section}{greetings}); # Don't do this for blessed values! + +Finally, if a hash ref rather than a blessed value, you could also use, as above: + + Dumper($Config->{section}->{greetings}); # Don't do this for blessed values! + +My (Ron Savage) personal preference for hashrefs is the one without the gross '->' chars, +but that requires you to double up the initial $ character (which I hope you noticed!). + =head1 METHODS =head2 errstr() @@ -324,9 +432,16 @@ Generates the file content for the object and returns it as a string. =head2 What happens if a key is repeated? -The last value is retained, overwriting any previous values. +Case 1: The last value is retained, overwriting any previous values. -See t/06.repeat.key.t. +See t/06.repeat.key.t for sample code. + +Case 2: However, by using the new array syntax, as of V 2.30, you can assign a set of +values to a key. + +For details, see the L section above for sample code. + +See t/test.conf for sample data. =head2 Why can't I put comments at the ends of lines? @@ -489,3 +604,4 @@ The full text of the license can be found in the LICENSE file included with this module. =cut + diff --git a/t/02.main.t b/t/02.main.t index 1329155..0e0041d 100644 --- a/t/02.main.t +++ b/t/02.main.t @@ -17,7 +17,7 @@ use Test::More tests => 33; # Warning: There is another version line, in lib/Config/Tiny.pm. -our $VERSION = '2.28'; +our $VERSION = '2.30'; # -------------------- @@ -47,10 +47,14 @@ my $expected = { root => 'something', }, section => { - one => 'two', Foo => 'Bar', - this => 'Your Mother!', blank => '', + greetings => [ + "Hello", + "World!", + ], + one => 'two', + this => 'Your Mother!', }, 'Section Two' => { 'something else' => 'blah', @@ -175,3 +179,4 @@ SCOPE: { 'errstr() returns expected error', ); } + diff --git a/t/test.conf b/t/test.conf index 50b9307..872f224 100644 --- a/t/test.conf +++ b/t/test.conf @@ -1,11 +1,14 @@ root=something [section] +greetings[]=Hello one=two Foo=Bar +greetings[]=World! this=Your Mother! blank= [Section Two] something else=blah - remove = whitespace \ No newline at end of file + remove = whitespace +