Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package perl-Spreadsheet-Read for 
openSUSE:Factory checked in at 2025-12-20 21:47:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/perl-Spreadsheet-Read (Old)
 and      /work/SRC/openSUSE:Factory/.perl-Spreadsheet-Read.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "perl-Spreadsheet-Read"

Sat Dec 20 21:47:12 2025 rev:26 rq:1323813 version:0.940.0

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/perl-Spreadsheet-Read/perl-Spreadsheet-Read.changes  
    2025-04-15 16:49:24.223883979 +0200
+++ 
/work/SRC/openSUSE:Factory/.perl-Spreadsheet-Read.new.1928/perl-Spreadsheet-Read.changes
    2025-12-20 21:50:00.431925344 +0100
@@ -1,0 +2,13 @@
+Wed Dec 10 05:36:08 UTC 2025 - Tina Müller <[email protected]>
+
+- updated to 0.940.0 (0.94)
+   see /usr/share/doc/packages/perl-Spreadsheet-Read/Changes
+
+  0.94 - 09 Dec 2025, H.Merijn Brand
+      * Add label2col ()
+      * $sheet->{attr} should always be there, might be empty (issue#56)
+      * Skip type  tests when unsupported (issue#56)
+      * Skip merge tests when unsupported (issue#56)
+      * Update SECURITY.md
+
+-------------------------------------------------------------------

Old:
----
  Spreadsheet-Read-0.93.tgz

New:
----
  README.md
  Spreadsheet-Read-0.94.tgz
  _scmsync.obsinfo
  build.specials.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ perl-Spreadsheet-Read.spec ++++++
--- /var/tmp/diff_new_pack.zw5Dv5/_old  2025-12-20 21:50:00.959947204 +0100
+++ /var/tmp/diff_new_pack.zw5Dv5/_new  2025-12-20 21:50:00.963947369 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package perl-Spreadsheet-Read
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -18,15 +18,16 @@
 
 %define cpan_name Spreadsheet-Read
 Name:           perl-Spreadsheet-Read
-Version:        0.930.0
+Version:        0.940.0
 Release:        0
-# 0.93 -> normalize -> 0.930.0
-%define cpan_version 0.93
+# 0.94 -> normalize -> 0.940.0
+%define cpan_version 0.94
 License:        Artistic-1.0 OR GPL-1.0-or-later
 Summary:        Meta-Wrapper for reading spreadsheet data
 URL:            https://metacpan.org/release/%{cpan_name}
 Source0:        
https://cpan.metacpan.org/authors/id/H/HM/HMBRAND/%{cpan_name}-%{cpan_version}.tgz
 Source1:        cpanspec.yml
+Source100:      README.md
 BuildArch:      noarch
 BuildRequires:  perl
 BuildRequires:  perl-macros
@@ -45,7 +46,7 @@
 Recommends:     perl(Data::Dumper) >= 2.183
 Recommends:     perl(Data::Peek) >= 0.530
 Recommends:     perl(Encode) >= 3.21
-Recommends:     perl(File::Temp) >= 0.2311
+Recommends:     perl(File::Temp) >= 0.2312
 Recommends:     perl(IO::Scalar)
 %{perl_requires}
 # MANUAL BEGIN

++++++ README.md ++++++

## Build Results

Current state of perl in openSUSE:Factory is

![Factory build 
results](https://br.opensuse.org/status/openSUSE:Factory/perl-Spreadsheet-Read/standard)

The current state of perl in the devel project build (devel:languages:perl)

![Devel project build 
results](https://br.opensuse.org/status/devel:languages:perl/perl-Spreadsheet-Read)



++++++ Spreadsheet-Read-0.93.tgz -> Spreadsheet-Read-0.94.tgz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/Changes 
new/Spreadsheet-Read-0.94/Changes
--- old/Spreadsheet-Read-0.93/Changes   2025-03-17 16:42:09.000000000 +0100
+++ new/Spreadsheet-Read-0.94/Changes   2025-12-09 14:00:38.000000000 +0100
@@ -1,3 +1,10 @@
+0.94   - 09 Dec 2025, H.Merijn Brand
+    * Add label2col ()
+    * $sheet->{attr} should always be there, might be empty (issue#56)
+    * Skip type  tests when unsupported (issue#56)
+    * Skip merge tests when unsupported (issue#56)
+    * Update SECURITY.md
+
 0.93   - 17 Mar 2025, H.Merijn Brand
     * Add ranges and cellranges
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/META.json 
new/Spreadsheet-Read-0.94/META.json
--- old/Spreadsheet-Read-0.93/META.json 2025-03-17 16:44:30.000000000 +0100
+++ new/Spreadsheet-Read-0.94/META.json 2025-12-09 14:06:48.000000000 +0100
@@ -1,58 +1,47 @@
 {
-   "generated_by" : "Author",
-   "dynamic_config" : 1,
-   "resources" : {
-      "bugtracker" : {
-         "web" : "https://github.com/Tux/Spreadsheet-Read/issues";
-      },
-      "license" : [
-         "http://dev.perl.org/licenses/";
-      ],
-      "repository" : {
-         "url" : "https://github.com/Tux/Spreadsheet-Read";,
-         "type" : "git",
-         "web" : "https://github.com/Tux/Spreadsheet-Read";
+   "release_status" : "stable",
+   "provides" : {
+      "Spreadsheet::Read" : {
+         "file" : "Read.pm",
+         "version" : "0.94"
       }
    },
-   "author" : [
-      "H.Merijn Brand <[email protected]>"
-   ],
    "prereqs" : {
-      "runtime" : {
-         "suggests" : {
-            "Data::Dumper" : "2.189"
+      "test" : {
+         "requires" : {
+            "Test::Harness" : "0",
+            "Test::NoWarnings" : "0",
+            "Test::More" : "0.88"
          },
          "recommends" : {
+            "Test::More" : "1.302219"
+         }
+      },
+      "runtime" : {
+         "recommends" : {
+            "Data::Peek" : "0.53",
+            "Encode" : "3.21",
             "Data::Dumper" : "2.183",
-            "File::Temp" : "0.2311",
             "IO::Scalar" : "0",
-            "Data::Peek" : "0.53",
-            "Encode" : "3.21"
+            "File::Temp" : "0.2312"
          },
          "requires" : {
-            "Encode" : "0",
-            "List::Util" : "0",
+            "Data::Dumper" : "0",
+            "File::Temp" : "0.22",
             "Exporter" : "0",
-            "Carp" : "0",
+            "Encode" : "0",
             "Data::Peek" : "0",
+            "List::Util" : "0",
             "perl" : "5.008001",
-            "Data::Dumper" : "0",
-            "File::Temp" : "0.22"
-         }
-      },
-      "test" : {
-         "requires" : {
-            "Test::More" : "0.88",
-            "Test::Harness" : "0",
-            "Test::NoWarnings" : "0"
+            "Carp" : "0"
          },
-         "recommends" : {
-            "Test::More" : "1.302209"
+         "suggests" : {
+            "Data::Dumper" : "2.192"
          }
       },
       "configure" : {
          "suggests" : {
-            "ExtUtils::MakeMaker" : "7.72"
+            "ExtUtils::MakeMaker" : "7.76"
          },
          "recommends" : {
             "ExtUtils::MakeMaker" : "7.22"
@@ -62,119 +51,130 @@
          }
       }
    },
+   "name" : "Spreadsheet-Read",
    "license" : [
       "perl_5"
    ],
-   "version" : "0.93",
+   "abstract" : "Meta-Wrapper for reading spreadsheet data",
+   "version" : "0.94",
+   "meta-spec" : {
+      "version" : 2,
+      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";
+   },
+   "dynamic_config" : 1,
+   "resources" : {
+      "repository" : {
+         "type" : "git",
+         "url" : "https://github.com/Tux/Spreadsheet-Read";,
+         "web" : "https://github.com/Tux/Spreadsheet-Read";
+      },
+      "license" : [
+         "http://dev.perl.org/licenses/";
+      ],
+      "bugtracker" : {
+         "web" : "https://github.com/Tux/Spreadsheet-Read/issues";
+      }
+   },
    "optional_features" : {
-      "opt_sxc" : {
+      "opt_xlsx" : {
+         "description" : "Provides parsing of Microsoft Excel 2007 files",
          "prereqs" : {
             "runtime" : {
                "recommends" : {
-                  "Spreadsheet::ReadSXC" : "0.39"
+                  "Spreadsheet::ParseXLSX" : "0.36"
                },
                "requires" : {
-                  "Spreadsheet::ReadSXC" : "0.26"
+                  "Spreadsheet::ParseXLSX" : "0.24",
+                  "Spreadsheet::ParseExcel::FmtDefault" : "0"
                }
             }
-         },
-         "description" : "Provides parsing of OpenOffice spreadsheets old 
style"
+         }
       },
-      "opt_tools" : {
+      "opt_gnumeric" : {
          "prereqs" : {
             "runtime" : {
                "recommends" : {
-                  "Tk::TableMatrix::Spreadsheet" : "0",
-                  "Tk::NoteBook" : "0",
-                  "Tk" : "804.036"
+                  "Spreadsheet::ReadGnumeric" : "0.4"
+               },
+               "requires" : {
+                  "Spreadsheet::ReadGnumeric" : "0.2"
                }
             }
          },
-         "description" : "Spreadsheet tools"
+         "description" : "Provides parsing of Gnumeric spreadsheets"
       },
-      "opt_csv" : {
+      "opt_ods" : {
+         "description" : "Provides parsing of OpenOffice spreadsheets",
          "prereqs" : {
             "runtime" : {
                "requires" : {
-                  "Text::CSV_XS" : "0.71"
+                  "Spreadsheet::ParseODS" : "0.26"
                },
                "recommends" : {
-                  "Text::CSV_PP" : "2.06",
-                  "Text::CSV_XS" : "1.60",
-                  "Text::CSV" : "2.06"
+                  "Spreadsheet::ParseODS" : "0.39"
                }
             }
-         },
-         "description" : "Provides parsing of CSV streams"
+         }
       },
-      "opt_gnumeric" : {
-         "description" : "Provides parsing of Gnumeric spreadsheets",
+      "opt_sxc" : {
          "prereqs" : {
             "runtime" : {
                "requires" : {
-                  "Spreadsheet::ReadGnumeric" : "0.2"
+                  "Spreadsheet::ReadSXC" : "0.26"
                },
                "recommends" : {
-                  "Spreadsheet::ReadGnumeric" : "0.4"
+                  "Spreadsheet::ReadSXC" : "0.39"
                }
             }
-         }
+         },
+         "description" : "Provides parsing of OpenOffice spreadsheets old 
style"
       },
-      "opt_ods" : {
-         "description" : "Provides parsing of OpenOffice spreadsheets",
+      "opt_tools" : {
          "prereqs" : {
             "runtime" : {
                "recommends" : {
-                  "Spreadsheet::ParseODS" : "0.39"
-               },
-               "requires" : {
-                  "Spreadsheet::ParseODS" : "0.26"
+                  "Tk" : "804.036",
+                  "Tk::TableMatrix::Spreadsheet" : "0",
+                  "Tk::NoteBook" : "0"
                }
             }
-         }
+         },
+         "description" : "Spreadsheet tools"
       },
-      "opt_xls" : {
-         "description" : "Provides parsing of Microsoft Excel files",
+      "opt_csv" : {
          "prereqs" : {
             "runtime" : {
                "requires" : {
-                  "OLE::Storage_Lite" : "!= 0.21",
-                  "Spreadsheet::ParseExcel" : "0.34",
-                  "Spreadsheet::ParseExcel::FmtDefault" : "0"
+                  "Text::CSV_XS" : "0.71"
                },
                "recommends" : {
-                  "Spreadsheet::ParseExcel" : "0.66",
-                  "OLE::Storage_Lite" : "0.22"
+                  "Text::CSV" : "2.06",
+                  "Text::CSV_XS" : "1.61",
+                  "Text::CSV_PP" : "2.06"
                }
             }
-         }
+         },
+         "description" : "Provides parsing of CSV streams"
       },
-      "opt_xlsx" : {
+      "opt_xls" : {
          "prereqs" : {
             "runtime" : {
+               "recommends" : {
+                  "OLE::Storage_Lite" : "0.24",
+                  "Spreadsheet::ParseExcel" : "0.66"
+               },
                "requires" : {
+                  "OLE::Storage_Lite" : "!= 0.21",
                   "Spreadsheet::ParseExcel::FmtDefault" : "0",
-                  "Spreadsheet::ParseXLSX" : "0.24"
-               },
-               "recommends" : {
-                  "Spreadsheet::ParseXLSX" : "0.36"
+                  "Spreadsheet::ParseExcel" : "0.34"
                }
             }
          },
-         "description" : "Provides parsing of Microsoft Excel 2007 files"
+         "description" : "Provides parsing of Microsoft Excel files"
       }
    },
-   "release_status" : "stable",
-   "abstract" : "Meta-Wrapper for reading spreadsheet data",
-   "name" : "Spreadsheet-Read",
-   "provides" : {
-      "Spreadsheet::Read" : {
-         "version" : "0.93",
-         "file" : "Read.pm"
-      }
-   },
-   "meta-spec" : {
-      "version" : 2,
-      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec";
-   }
+   "generated_by" : "Author",
+   "author" : [
+      "H.Merijn Brand <[email protected]>"
+   ]
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/META.yml 
new/Spreadsheet-Read-0.94/META.yml
--- old/Spreadsheet-Read-0.93/META.yml  2025-03-17 16:44:30.000000000 +0100
+++ new/Spreadsheet-Read-0.94/META.yml  2025-12-09 14:06:48.000000000 +0100
@@ -1,7 +1,7 @@
 --- 
 abstract: Meta-Wrapper for reading spreadsheet data
 author: 
-  - H.Merijn Brand <[email protected]>
+  - H.Merijn Brand <[email protected]>
 configure_requires: 
   ExtUtils::MakeMaker: 0
 dynamic_config: 1
@@ -44,14 +44,14 @@
 provides: 
   Spreadsheet::Read: 
     file: Read.pm
-    version: '0.93'
+    version: '0.94'
 recommends: 
   Data::Dumper: '2.183'
   Data::Peek: '0.53'
   Encode: '3.21'
-  File::Temp: '0.2311'
+  File::Temp: '0.2312'
   IO::Scalar: 0
-  Test::More: '1.302209'
+  Test::More: '1.302219'
 requires: 
   Carp: 0
   Data::Dumper: 0
@@ -68,4 +68,4 @@
   bugtracker: https://github.com/Tux/Spreadsheet-Read/issues
   license: http://dev.perl.org/licenses/
   repository: https://github.com/Tux/Spreadsheet-Read
-version: '0.93'
+version: '0.94'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/Makefile.PL 
new/Spreadsheet-Read-0.94/Makefile.PL
--- old/Spreadsheet-Read-0.93/Makefile.PL       2025-01-06 13:26:45.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/Makefile.PL       2025-04-07 11:14:56.000000000 
+0200
@@ -16,13 +16,15 @@
 sub link_or_copy {
     my ($source, $dest) = @_;
 
+    -f $dest and unlink $dest;
     link ($source, $dest) or copy ($source, $dest);
     } # link_or_copy
 
+link_or_copy "scripts/xlsx2csv", "scripts/xls2csv";
+link_or_copy "scripts/xlscat",   "scripts/xlsgrep";
+
 my @exe;
 unless (exists $ENV{AUTOMATED_TESTING} and $ENV{AUTOMATED_TESTING} == 1) {
-    -f "scripts/xls2csv" or link_or_copy "scripts/xlsx2csv", "scripts/xls2csv";
-    -f "scripts/xlsgrep" or link_or_copy "scripts/xlscat",   "scripts/xlsgrep";
     for ( [ "xlscat",  "Convert Spreadsheet to plain text or CSV"      ],
          [ "xlsgrep",  "Grep pattern from Spreadsheet"                 ],
          [ "ss2tk",    "Show a Spreadsheet in Perl/Tk"                 ],
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/Read.pm 
new/Spreadsheet-Read-0.94/Read.pm
--- old/Spreadsheet-Read-0.93/Read.pm   2025-03-14 11:01:24.000000000 +0100
+++ new/Spreadsheet-Read-0.94/Read.pm   2025-06-30 07:15:28.000000000 +0200
@@ -38,7 +38,7 @@
 use strict;
 use warnings;
 
-our $VERSION = "0.93";
+our $VERSION = "0.94";
 sub  Version { $VERSION }
 
 use Carp;
@@ -288,6 +288,20 @@
     $cell;
     } # col2label
 
+# label2col ("D") => 4
+sub label2col {
+    ref $_[0] eq __PACKAGE__ and shift;
+    my $l = shift        or  return;
+    $l =~ m/^[0-9]+$/    and return $l + 0;
+    $l =~ m/^[A-Za-z]+$/ or  return;
+    $l = uc $l;
+    my $c = 0;
+    while ($l =~ s/^([A-Z])//) {
+       $c = 26 * $c + 1 + ord ($1) - ord ("A");
+       }
+    return $c;
+    } # label2col
+
 # cr2cell (4, 18) => "D18"
 # No prototype to allow 'cr2cell (@rowcol)'
 sub cr2cell {
@@ -300,12 +314,8 @@
 # cell2cr ("D18") => (4, 18)
 sub cell2cr {
     ref $_[0] eq __PACKAGE__ and shift;
-    my ($cc, $r) = (uc ($_[0]||"") =~ m/^([A-Z]+)([0-9]+)$/) or return (0, 0);
-    my $c = 0;
-    while ($cc =~ s/^([A-Z])//) {
-       $c = 26 * $c + 1 + ord ($1) - ord ("A");
-       }
-    ($c, $r);
+    my ($cc, $r) = (uc ($_[0]||"") =~ m/^([A-Z-z]+)([0-9]+)$/) or return (0, 
0);
+    (label2col ($cc), $r);
     } # cell2cr
 
 # my @row = cellrow ($book->[1], 1);
@@ -816,6 +826,8 @@
                    mincol => 1,
                    indx   => 1,
                    merged => [],
+                   cell   => [],
+                   attr   => [],
                    };
                # Transpose to column vectors.
                # The A1, B5 etc items could be added here as well.
@@ -1531,6 +1543,11 @@
     return Spreadsheet::Read::col2label (@_);
     } # col2label
 
+sub label2col {
+    $_[0] =~ m/::/ and shift; # class unused
+    return Spreadsheet::Read::label2col (@_);
+    } # label2col
+
 sub cr2cell {
     $_[0] =~ m/::/ and shift; # class unused
     return Spreadsheet::Read::cr2cell (@_);
@@ -1573,17 +1590,23 @@
     } # row
 
 # my @col = $sheet->cellcolumn (1);
+# my @col = $sheet->cellcolumn ("A");
 sub cellcolumn {
     my ($sheet, $col) = @_;
-    defined $col && $col > 0 && $col <= $sheet->{maxcol} or return;
+    defined $col or return;
+    $col =~ m/^[A-Za-z]+$/ and $col = label2col ($col);
+    $col > 0 && $col <= $sheet->{maxcol} or return;
     my $s = $sheet->{cell};
     map { $s->[$col][$_] } 1..$sheet->{maxrow};
     } # cellcolumn
 
 # my @col = $sheet->column (1);
+# my @col = $sheet->column ("A");
 sub column {
     my ($sheet, $col) = @_;
-    defined $col && $col > 0 && $col <= $sheet->{maxcol} or return;
+    defined $col or return;
+    $col =~ m/^[A-Za-z]+$/ and $col = label2col ($col);
+    $col > 0 && $col <= $sheet->{maxcol} or return;
     map { $sheet->{$sheet->cr2cell ($col, $_)} } 1..$sheet->{maxrow};
     } # column
 
@@ -1793,7 +1816,7 @@
 index 1 too in the C<cell> element of the sheet hash, so cell "A1" is
 the same as C<cell> [1, 1] (column first). To switch between the two,
 there are helper functions available: C<cell2cr ()>, C<cr2cell ()>,
-and C<col2label ()>.
+C<col2label ()> and C<label2col ()>.
 
 The C<cell> hash entry contains unformatted data, while the hash entries
 with the traditional labels contain the formatted values (if applicable).
@@ -2034,9 +2057,9 @@
 
 =head3 col2label
 
- my $col_id = col2label (col);
+ my $col_id = col2label ($col);
 
- my $col_id = $book->col2label (col);  # OO
+ my $col_id = $book->col2label ($col);  # OO
 
 C<col2label ()> converts a C<(column)> (1 based) to the letters used in the
 traditional cell notation:
@@ -2044,6 +2067,18 @@
   my $id = col2label ( 4); # $id now "D"
   my $id = col2label (28); # $id now "AB"
 
+=head3 label2col
+
+ my $col = label2col ($id);
+
+ my $col = $book->label2col ($id);  # OO
+
+C<label2col ()> converts a C<(column ID)> to the 1-based numeric equivalent
+or C<undef> on invalid C<$id>.
+
+  my $c = label2col ("D");  # $c now 4
+  my $c = label2col ("AB"); # $c now 28
+
 =head3 cr2cell
 
  my $cell = cr2cell (col, row);
@@ -2275,6 +2310,8 @@
 
  my @col = $sheet->column ($col);
 
+C<$col> can be numeric (1-based) or traditional.
+
 Get full column of formatted values (like C<< $sheet->{C1} .. $sheet->{C9} >>)
 
 Note that the indexes in the returned list are 0-based.
@@ -2283,6 +2320,8 @@
 
  my @col = $sheet->cellcolumn ($col);
 
+C<$col> can be numeric (1-based) or traditional.
+
 Get full column of unformatted values (like C<< $sheet->{cell}[3][1] .. 
$sheet->{cell}[3][9] >>)
 
 Note that the indexes in the returned list are 0-based.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/SECURITY.md 
new/Spreadsheet-Read-0.94/SECURITY.md
--- old/Spreadsheet-Read-0.93/SECURITY.md       2025-02-26 16:35:54.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/SECURITY.md       2025-12-09 13:59:36.000000000 
+0100
@@ -1,7 +1,6 @@
 # Security Policy for the Spreadsheet::Read distribution.
 
-Report issues via email at: H.Merijn Brand <[email protected]>.
-
+Report security issues by email to H.Merijn Brand <[email protected]>.
 
 This is the Security Policy for Spreadsheet::Read.
 
@@ -9,13 +8,13 @@
 [git repository for 
Spreadsheet::Read](https://github.com/Tux/Spreadsheet-Read).
 
 This text is based on the CPAN Security Group's Guidelines for Adding
-a Security Policy to Perl Distributions (version 1.0.0)
+a Security Policy to Perl Distributions (version 1.3.0)
 https://security.metacpan.org/docs/guides/security-policy-for-authors.html
 
 # How to Report a Security Vulnerability
 
-Security vulnerabilities can be reported by e-mail to the current
-project maintainers at H.Merijn Brand <[email protected]>.
+Security vulnerabilities can be reported to the current Spreadsheet::Read
+maintainers by email to H.Merijn Brand <[email protected]>.
 
 Please include as many details as possible, including code samples
 or test cases, so that we can reproduce the issue.  Check that your
@@ -62,13 +61,16 @@
 
 Any security vulnerabilities in Spreadsheet::Read are covered by this policy.
 
+Security vulnerabilities in versions of any libraries that are
+included in Spreadsheet::Read are also covered by this policy.
+
 Security vulnerabilities are considered anything that allows users
 to execute unauthorised code, access unauthorised resources, or to
 have an adverse impact on accessibility or performance of a system.
 
-Security vulnerabilities in upstream software (embedded libraries,
-prerequisite modules or system libraries, or in Perl), are not
-covered by this policy unless they affect Spreadsheet::Read, or 
Spreadsheet::Read can
+Security vulnerabilities in upstream software (prerequisite modules
+or system libraries, or in Perl), are not covered by this policy
+unless they affect Spreadsheet::Read, or Spreadsheet::Read can
 be used to exploit vulnerabilities in them.
 
 Security vulnerabilities in downstream software (any software that
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/cpanfile 
new/Spreadsheet-Read-0.94/cpanfile
--- old/Spreadsheet-Read-0.93/cpanfile  2025-03-17 16:44:29.000000000 +0100
+++ new/Spreadsheet-Read-0.94/cpanfile  2025-12-09 14:06:48.000000000 +0100
@@ -9,17 +9,17 @@
 recommends "Data::Dumper"             => "2.183";
 recommends "Data::Peek"               => "0.53";
 recommends "Encode"                   => "3.21";
-recommends "File::Temp"               => "0.2311";
+recommends "File::Temp"               => "0.2312";
 recommends "IO::Scalar";
 
-suggests   "Data::Dumper"             => "2.189";
+suggests   "Data::Dumper"             => "2.192";
 
 on "configure" => sub {
     requires   "ExtUtils::MakeMaker";
 
     recommends "ExtUtils::MakeMaker"      => "7.22";
 
-    suggests   "ExtUtils::MakeMaker"      => "7.72";
+    suggests   "ExtUtils::MakeMaker"      => "7.76";
     };
 
 on "test" => sub {
@@ -27,7 +27,7 @@
     requires   "Test::More"               => "0.88";
     requires   "Test::NoWarnings";
 
-    recommends "Test::More"               => "1.302209";
+    recommends "Test::More"               => "1.302219";
     };
 
 feature "opt_csv", "Provides parsing of CSV streams" => sub {
@@ -35,7 +35,7 @@
 
     recommends "Text::CSV"                => "2.06";
     recommends "Text::CSV_PP"             => "2.06";
-    recommends "Text::CSV_XS"             => "1.60";
+    recommends "Text::CSV_XS"             => "1.61";
     };
 
 feature "opt_gnumeric", "Provides parsing of Gnumeric spreadsheets" => sub {
@@ -67,7 +67,7 @@
     requires   "Spreadsheet::ParseExcel"  => "0.34";
     requires   "Spreadsheet::ParseExcel::FmtDefault";
 
-    recommends "OLE::Storage_Lite"        => "0.22";
+    recommends "OLE::Storage_Lite"        => "0.24";
     recommends "Spreadsheet::ParseExcel"  => "0.66";
     };
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/scripts/xlscat 
new/Spreadsheet-Read-0.94/scripts/xlscat
--- old/Spreadsheet-Read-0.93/scripts/xlscat    2025-01-06 13:31:04.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/scripts/xlscat    2025-04-07 11:02:46.000000000 
+0200
@@ -115,7 +115,7 @@
 my $enc_o;             # Output encoding
 GetOptions (
     "help|?"           => sub { usage (0); },
-    "V|version"        => sub { print "$CMD [$VERSION] Spreadsheet::Read 
[$Spreadsheet::Read::VERSION]\n"; exit 0; },
+    "V|version"                => sub { print "$CMD [$VERSION] 
Spreadsheet::Read [$Spreadsheet::Read::VERSION]\n"; exit 0; },
       "list"           => sub { list_parsers (); },
 
     # Input CSV
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/scripts/xlsx2csv 
new/Spreadsheet-Read-0.94/scripts/xlsx2csv
--- old/Spreadsheet-Read-0.93/scripts/xlsx2csv  2025-01-06 13:31:13.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/scripts/xlsx2csv  2025-04-07 11:03:41.000000000 
+0200
@@ -35,20 +35,20 @@
 
 use Getopt::Long qw( :config bundling noignorecase passthrough );
 GetOptions (
-    "help|?"           => sub { usage 0; },
-    "V|version"        => sub { print "$cmd [$VERSION]\n"; exit 0; },
+    "help|?"           => sub { usage 0; },
+    "V|version"                => sub { print "$cmd [$VERSION]\n"; exit 0; },
       "man"            => sub { pod_nroff    (); },
       "info"           => sub { pod_text     (); },
       "list"           => sub { list_parsers (); },
 
-    "o|c|out=s"        => \ my $csv,
+    "o|c|out=s"                => \ my $csv,
     "i|x|in=s"         => \ my $xls,
-    "f|force!"         => \ my $opt_f,
+    "f|force!"         => \ my $opt_f,
 
     "s|sep=s"          => \ my $opt_s,
 
-    "A|all!"           => \ my $opt_A,
-    "N|no-pfx!"        => \ my $opt_N,
+    "A|all!"           => \ my $opt_A,
+    "N|no-pfx!"                => \ my $opt_N,
     "Z|zip!"           => \ my $opt_Z,
     "J|join=s"         => \(my $opt_J = "-"),
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/10_basics.t 
new/Spreadsheet-Read-0.94/t/10_basics.t
--- old/Spreadsheet-Read-0.93/t/10_basics.t     2024-01-02 22:22:20.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/10_basics.t     2025-04-04 10:06:34.000000000 
+0200
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 118;
+use Test::More tests => 131;
 use Test::NoWarnings;
 
 use Spreadsheet::Read qw(:DEFAULT parses rows );
@@ -61,7 +61,12 @@
     is ($cell, $x->[3], "Cell for ($c, $r)");
 
     is (Spreadsheet::Read::col2label ($x->[0]), $x->[2], "Col $c eq $x->[2]");
+    is (Spreadsheet::Read::label2col ($x->[2]), $x->[0], "Col $x->[2] eq $c") 
if $x->[2];
     }
+is (Spreadsheet::Read::label2col (undef), undef, "Col undef eq undef");
+is (Spreadsheet::Read::label2col (   ""), undef, "Col    '' eq undef");
+is (Spreadsheet::Read::label2col (   -2), undef, "Col    -2 eq undef");
+is (Spreadsheet::Read::label2col ("%_#"), undef, "Col   %_# eq undef");
 
 # Some illegal rows () calls
 for (undef, "", " ", 0, 1, [], {}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/200_csv.t 
new/Spreadsheet-Read-0.94/t/200_csv.t
--- old/Spreadsheet-Read-0.93/t/200_csv.t       2021-02-25 11:32:38.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/200_csv.t       2025-04-07 11:05:01.000000000 
+0200
@@ -47,8 +47,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadData ("files/test_m.csv"),      "Read/Parse M\$ csv file");
@@ -63,8 +63,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadData ("files/test_x.csv", sep => "=", quote => "_"),
@@ -80,8 +80,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 foreach my $attr ("strip", "trim") {
@@ -171,9 +171,9 @@
     ok (1, "Undefined fields");
     foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
        my ($c, $r) = cell2cr ($cell);
-       is ($csv->[1]{cell}[$r][$c],    "",     "Unformatted cell $cell");
+       is ($csv->[1]{cell}[$r][$c],    "",     "Unformatted cell $cell");
        my $llec = cr2cell ($r, $c);
-       is ($csv->[1]{$llec},           "",     "Formatted   cell $cell");
+       is ($csv->[1]{$llec},           "",     "Formatted   cell $cell");
        }
     }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/202_csv.t 
new/Spreadsheet-Read-0.94/t/202_csv.t
--- old/Spreadsheet-Read-0.93/t/202_csv.t       2024-12-31 09:41:37.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/202_csv.t       2025-04-07 11:05:32.000000000 
+0200
@@ -40,8 +40,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 is ($csv->[0]{sepchar},        ",",                    "{sepchar}");
 is ($csv->[0]{quote},  '"',                    "{quote}");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/203_csv.t 
new/Spreadsheet-Read-0.94/t/203_csv.t
--- old/Spreadsheet-Read-0.93/t/203_csv.t       2017-08-15 17:27:52.000000000 
+0200
+++ new/Spreadsheet-Read-0.94/t/203_csv.t       2025-04-07 11:05:48.000000000 
+0200
@@ -51,8 +51,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataStream ("files/test_m.csv", sep => ";"),    "Read/Parse M\$ 
csv file");
@@ -67,8 +67,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataStream ("files/test_x.csv", sep => "=", quote => "_"),
@@ -84,8 +84,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 my $data = "a,b,c\n1,2,3\n";
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/204_csv.t 
new/Spreadsheet-Read-0.94/t/204_csv.t
--- old/Spreadsheet-Read-0.93/t/204_csv.t       2016-11-27 12:25:14.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/204_csv.t       2025-04-07 11:05:59.000000000 
+0200
@@ -47,8 +47,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 my @row = ("A3", "", "C3", "D3", (undef) x 15);
@@ -67,8 +67,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataCSV ("files/test_x.txt", sep => "=", quote => "_"),
@@ -84,8 +84,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 unless ($ENV{AUTOMATED_TESTING}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/205_csv.t 
new/Spreadsheet-Read-0.94/t/205_csv.t
--- old/Spreadsheet-Read-0.93/t/205_csv.t       2025-02-26 16:28:53.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/205_csv.t       2025-04-07 11:06:13.000000000 
+0200
@@ -5,7 +5,7 @@
 
 # OO version of 200_csv.t
 
-my     $tests = 271;
+my     $tests = 275;
 use     Test::More;
 require Test::NoWarnings;
 
@@ -71,11 +71,13 @@
 is ($sheet->row     (-55), undef, "No such row -55");
 is ($sheet->row     (  0), undef, "No such row   0");
 
-is_deeply ([$sheet->cellcolumn (1)], ["A1","A2","A3","A4",""], "col 1");
+is_deeply ([$sheet->cellcolumn (  1)], ["A1","A2","A3","A4",""], "col 1");
+is_deeply ([$sheet->cellcolumn ("A")], ["A1","A2","A3","A4",""], "col 1");
 is ($sheet->cellcolumn (255), undef, "No such col 255");
 is ($sheet->cellcolumn (-55), undef, "No such col -55");
 is ($sheet->cellcolumn (  0), undef, "No such col   0");
-is_deeply ([$sheet->column     (1)], ["A1","A2","A3","A4",""], "col 1");
+is_deeply ([$sheet->column       (1)], ["A1","A2","A3","A4",""], "col 1");
+is_deeply ([$sheet->column     ("A")], ["A1","A2","A3","A4",""], "col 1");
 is ($sheet->column     (255), undef, "No such col 255");
 is ($sheet->column     (-55), undef, "No such col -55");
 is ($sheet->column     (  0), undef, "No such col   0");
@@ -95,10 +97,10 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = $csv->cell2cr ($cell);
-    is ($sheet->{cell}[$c][$r],        "",     "Unformatted cell $cell 
direct");
-    is ($sheet->{$cell},       "",     "Formatted   cell $cell direct");
-    is ($sheet->cell ($c, $r), "",     "Unformatted cell $cell method");
-    is ($sheet->cell ($cell),  "",     "Formatted   cell $cell method");
+    is ($sheet->{cell}[$c][$r],        "",     "Unformatted cell $cell 
direct");
+    is ($sheet->{$cell},       "",     "Formatted   cell $cell direct");
+    is ($sheet->cell ($c, $r), "",     "Unformatted cell $cell method");
+    is ($sheet->cell ($cell),  "",     "Formatted   cell $cell method");
     }
 
 ok ($csv = Spreadsheet::Read->new ("files/test_m.csv"),        "Read/Parse M\$ 
csv file");
@@ -114,8 +116,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = $sheet->cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = Spreadsheet::Read->new ("files/test_x.csv", sep => "=", quote => 
"_"),
@@ -131,8 +133,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 {   # RT#74976 - Error Received when reading empty sheets
@@ -223,8 +225,10 @@
 ok ($csv->add ("files/test.csv", label => "Test"), "Add with label");
 is_deeply ([ $csv->sheets ], [qw( files/test.csv files/test.csv[2] Test )], 
"Sheet names");
 
-is ($csv->col2label (4),             "D",  "col2label as book  method");
-is ($csv->sheet (1)->col2label (27), "AA", "col2label as sheet method");
+is ($csv->col2label (4),               "D",  "col2label as book  method");
+is ($csv->sheet (1)->col2label (27),   "AA", "col2label as sheet method");
+is ($csv->label2col ("D"),             4,    "label2col as book  method");
+is ($csv->sheet (1)->label2col ("AA"), 27,   "label2col as sheet method");
 
 is_deeply ($csv->sheet (1)->range ("A2:B3"), {
     A2 => "A2", A3 => "A3", B2 => "B2", B3 => "" }, "range (A2:B3)");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/210_csv.t 
new/Spreadsheet-Read-0.94/t/210_csv.t
--- old/Spreadsheet-Read-0.93/t/210_csv.t       2018-01-22 09:17:41.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/210_csv.t       2025-04-07 11:06:24.000000000 
+0200
@@ -49,8 +49,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadData ("files/test_m.csv"),      "Read/Parse M\$ csv file");
@@ -65,8 +65,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadData ("files/test_x.csv", sep => "=", quote => "_"),
@@ -82,8 +82,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 {   # RT#74976 - Error Received when reading empty sheets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/212_csv.t 
new/Spreadsheet-Read-0.94/t/212_csv.t
--- old/Spreadsheet-Read-0.93/t/212_csv.t       2024-12-31 09:39:43.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/212_csv.t       2025-04-07 11:06:29.000000000 
+0200
@@ -39,8 +39,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 is ($csv->[0]{sepchar},        ",",                    "{sepchar}");
 is ($csv->[0]{quote},  '"',                    "{quote}");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/213_csv.t 
new/Spreadsheet-Read-0.94/t/213_csv.t
--- old/Spreadsheet-Read-0.93/t/213_csv.t       2016-11-27 12:25:25.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/213_csv.t       2025-04-07 11:06:41.000000000 
+0200
@@ -53,8 +53,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataStream ("files/test_m.csv", sep => ";"),    "Read/Parse M\$ 
csv file");
@@ -69,8 +69,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataStream ("files/test_x.csv", sep => "=", quote => "_"),
@@ -86,8 +86,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 unless ($ENV{AUTOMATED_TESTING}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/214_csv.t 
new/Spreadsheet-Read-0.94/t/214_csv.t
--- old/Spreadsheet-Read-0.93/t/214_csv.t       2025-02-26 16:04:33.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/214_csv.t       2025-04-07 11:06:50.000000000 
+0200
@@ -49,8 +49,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 my @row = ("A3", "", "C3", "D3", (undef) x 15);
@@ -69,8 +69,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataCSV ("files/test_x.txt", sep => "=", quote => "_"),
@@ -86,8 +86,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 unless ($ENV{AUTOMATED_TESTING}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/220_csv.t 
new/Spreadsheet-Read-0.94/t/220_csv.t
--- old/Spreadsheet-Read-0.93/t/220_csv.t       2018-01-22 09:20:06.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/220_csv.t       2025-04-07 11:06:58.000000000 
+0200
@@ -49,8 +49,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadData ("files/test_m.csv"),      "Read/Parse M\$ csv file");
@@ -65,8 +65,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadData ("files/test_x.csv", sep => "=", quote => "_"),
@@ -82,8 +82,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 {   # RT#74976 - Error Received when reading empty sheets
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/222_csv.t 
new/Spreadsheet-Read-0.94/t/222_csv.t
--- old/Spreadsheet-Read-0.93/t/222_csv.t       2015-06-25 18:39:28.000000000 
+0200
+++ new/Spreadsheet-Read-0.94/t/222_csv.t       2025-04-07 11:07:04.000000000 
+0200
@@ -40,8 +40,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 is ($csv->[0]{sepchar},        ",",                    "{sepchar}");
 is ($csv->[0]{quote},  '"',                    "{quote}");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/223_csv.t 
new/Spreadsheet-Read-0.94/t/223_csv.t
--- old/Spreadsheet-Read-0.93/t/223_csv.t       2016-11-27 12:25:45.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/223_csv.t       2025-04-07 11:07:14.000000000 
+0200
@@ -53,8 +53,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataStream ("files/test_m.csv", sep => ";"),    "Read/Parse M\$ 
csv file");
@@ -69,8 +69,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataStream ("files/test_x.csv", sep => "=", quote => "_"),
@@ -86,8 +86,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 unless ($ENV{AUTOMATED_TESTING}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/224_csv.t 
new/Spreadsheet-Read-0.94/t/224_csv.t
--- old/Spreadsheet-Read-0.93/t/224_csv.t       2016-11-27 12:25:48.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/224_csv.t       2025-04-07 11:07:24.000000000 
+0200
@@ -49,8 +49,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 my @row = ("A3", "", "C3", "D3", (undef) x 15);
@@ -69,8 +69,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 ok ($csv = ReadDataCSV ("files/test_x.txt", sep => "=", quote => "_"),
@@ -86,8 +86,8 @@
 ok (1, "Undefined fields");
 foreach my $cell (qw( B3 C1 C2 D2 D4 )) {
     my ($c, $r) = cell2cr ($cell);
-    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
-    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
+    is ($csv->[1]{cell}[$c][$r],       "",     "Unformatted cell $cell");
+    is ($csv->[1]{$cell},              "",     "Formatted   cell $cell");
     }
 
 unless ($ENV{AUTOMATED_TESTING}) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/605_perc.t 
new/Spreadsheet-Read-0.94/t/605_perc.t
--- old/Spreadsheet-Read-0.93/t/605_perc.t      2016-06-17 08:49:05.000000000 
+0200
+++ new/Spreadsheet-Read-0.94/t/605_perc.t      2025-06-30 07:30:31.000000000 
+0200
@@ -19,11 +19,17 @@
 
 foreach my $row (1 .. 19) {
     my @type = map { $ss->{attr}[$_][$row]{type} } 0 .. 3;
-    is ($type[1], "numeric",   "Type A$row numeric");
-    foreach my $col (2, 3) {   # Allow numeric for percentage in main test
-       my $cell   = ("A".."C")[$col - 1].$row;
-       my $expect = $type[$col] eq "numeric" ? "numeric" : "percentage";
-       is ($type[$col], $expect, "Type B$row percentage");
+
+    SKIP: {
+       defined $type[1] or
+           skip "$xls->[0]{parser} $xls->[0]{version} does not reliably 
support types", 3;
+
+       is ($type[1], "numeric",        "Type A$row numeric");
+       foreach my $col (2, 3) {        # Allow numeric for percentage in main 
test
+           my $cell   = ("A".."C")[$col - 1].$row;
+           my $expect = $type[$col] eq "numeric" ? "numeric" : "percentage";
+           is ($type[$col], $expect, "Type B$row percentage");
+           }
        }
 
     SKIP: {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/607_merged.t 
new/Spreadsheet-Read-0.94/t/607_merged.t
--- old/Spreadsheet-Read-0.93/t/607_merged.t    2020-07-09 11:30:39.000000000 
+0200
+++ new/Spreadsheet-Read-0.94/t/607_merged.t    2025-06-30 07:37:13.000000000 
+0200
@@ -15,7 +15,13 @@
 $parser eq "Spreadsheet::XLSX" and
     plan skip_all => "No merged cell support in $parser";
 
-ok (my $ss = ReadData ("files/merged.xlsx", attr => 1)->[1], "Read merged 
xlsx");
+my $xls = ReadData ("files/merged.xlsx", attr => 1);
+my $ss  = $xls->[1];
+
+defined $ss->{attr}[1][1]{merged} or
+    plan skip_all => "$xls->[0]{parser} $xls->[0]{version} does not support 
merge information";
+
+ok ($ss, "Read merged xlsx");
 
 is ($ss->{attr}[1][1]{merged}, 0, "unmerged A1");
 is ($ss->{attr}[2][1]{merged}, 1, "  merged B1");
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/Spreadsheet-Read-0.93/t/634_dates.t 
new/Spreadsheet-Read-0.94/t/634_dates.t
--- old/Spreadsheet-Read-0.93/t/634_dates.t     2023-11-01 09:39:14.000000000 
+0100
+++ new/Spreadsheet-Read-0.94/t/634_dates.t     2025-06-30 07:17:30.000000000 
+0200
@@ -18,8 +18,8 @@
 ok (my $xls = ReadData ("files/Dates.xlsx",
     attr => 1, dtfmt => "yyyy-mm-dd"), "Excel Date testcase");
 
-ok (my $ss = $xls->[1],        "sheet");
-is ($ss->{attr}, undef,        "attr");
+ok (my $ss = $xls->[1],            "sheet");
+is_deeply ($ss->{attr}, [], "attr");
 
 ok (1, "$xls->[0]{parser} $xls->[0]{version} does not support formats");
 

++++++ _scmsync.obsinfo ++++++
mtime: 1765344969
commit: a9677e8d81c05126c72517e228a4020e2cffcc00c9807231b05615bfb3c62531
url: https://src.opensuse.org/perl/perl-Spreadsheet-Read.git
revision: a9677e8d81c05126c72517e228a4020e2cffcc00c9807231b05615bfb3c62531
projectscmsync: https://src.opensuse.org/perl/_ObsPrj

++++++ build.specials.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/.gitignore new/.gitignore
--- old/.gitignore      1970-01-01 01:00:00.000000000 +0100
+++ new/.gitignore      2025-12-15 17:02:33.000000000 +0100
@@ -0,0 +1 @@
+.osc

Reply via email to