From 62fb29167cf3dba72b90acbf0da115b454cac435 Mon Sep 17 00:00:00 2001 From: Julian Maurice Date: Fri, 21 Sep 2018 18:05:42 +0200 Subject: [PATCH] Bug 21395: Make perlcritic happy This patch adds a .perlcriticrc (copied from qa-test-tools) and fixes almost all perlcrictic violations according to this .perlcriticrc The remaining violations are silenced out by appending a '## no critic' to the offending lines. They can still be seen by using the --force option of perlcritic This patch also modify t/00-testcritic.t to check all Perl files using the new .perlcriticrc. I'm not sure if this test script is still useful as it is now equivalent to `perlcritic --quiet .` and it looks like it is much slower (approximatively 5 times slower on my machine) Test plan: 1. Run `perlcritic --quiet .` from the root directory. It should output nothing 2. Run `perlcritic --quiet --force .`. It should output 6 errors (5 StringyEval, 1 BarewordFileHandles) 3. Run `TEST_QA=1 prove t/00-testcritic.t` 4. Read the patch. Check that all changes make sense and do not introduce undesired behaviour --- t/perlcriticrc => .perlcriticrc | 2 + C4/Accounts.pm | 1 - C4/Acquisition.pm | 1 - C4/Auth_with_cas.pm | 18 ++--- C4/AuthoritiesMarc.pm | 1 - C4/Barcodes/ValueBuilder.pm | 2 + C4/Barcodes/annual.pm | 8 +- C4/Biblio.pm | 1 - C4/Breeding.pm | 2 - C4/Circulation.pm | 1 - C4/ClassSortRoutine.pm | 4 +- C4/Context.pm | 2 - C4/Creators.pm | 2 + C4/Creators/Lib.pm | 2 +- C4/ImportBatch.pm | 12 +-- C4/InstallAuth.pm | 1 - C4/Labels.pm | 2 + C4/Labels/Label.pm | 5 +- C4/Languages.pm | 4 +- C4/Letters.pm | 1 - C4/Matcher.pm | 2 +- C4/Members/Messaging.pm | 1 - C4/Patroncards.pm | 2 + C4/Patroncards/Patroncard.pm | 8 +- C4/Record.pm | 8 +- C4/Ris.pm | 1 - C4/Search.pm | 5 -- C4/Serials.pm | 21 ++--- C4/Templates.pm | 2 +- Makefile.PL | 6 +- docs/CAS/CASProxy/examples/koha_webservice.pl | 2 +- .../CASProxy/examples/proxy_cas_callback.pl | 6 +- docs/CAS/CASProxy/examples/proxy_cas_data.pl | 6 +- fix-perl-path.PL | 4 +- install-CPAN.pl | 2 + installer/data/mysql/labels_upgrade.pl | 3 +- installer/data/mysql/patroncards_upgrade.pl | 3 +- installer/data/mysql/update22to30.pl | 16 ++-- installer/data/mysql/updatedatabase.pl | 10 +-- installer/externalmodules.pl | 6 +- misc/admin/koha-preferences | 1 + misc/batchRepairMissingBiblionumbers.pl | 1 - misc/batchdeletebiblios.pl | 2 +- misc/bin/connexion_import_daemon.pl | 1 + misc/check_sysprefs.pl | 6 +- misc/cronjobs/build_browser_and_cloud.pl | 2 +- misc/cronjobs/gather_print_notices.pl | 3 +- misc/cronjobs/holds/cancel_expired_holds.pl | 3 +- misc/cronjobs/longoverdue.pl | 6 +- misc/cronjobs/rss/rss.pl | 6 +- .../thirdparty/TalkingTech_itiva_inbound.pl | 1 + misc/cronjobs/update_totalissues.pl | 2 +- misc/devel/populate_db.pl | 2 +- misc/exportauth.pl | 6 +- misc/link_bibs_to_authorities.pl | 2 +- misc/maintenance/cmp_sysprefs.pl | 2 +- .../fix_accountlines_rmdupfines_bug8253.pl | 1 - misc/maintenance/touch_all_biblios.pl | 10 ++- misc/maintenance/touch_all_items.pl | 10 ++- .../22_to_30/export_Authorities.pl | 5 +- .../22_to_30/export_Authorities_xml.pl | 5 +- .../22_to_30/move_marc_to_biblioitems.pl | 3 +- misc/migration_tools/buildCOUNTRY.pl | 2 +- misc/migration_tools/buildEDITORS.pl | 1 - misc/migration_tools/buildLANG.pl | 2 +- misc/migration_tools/bulkmarcimport.pl | 7 +- .../remove_unused_authorities.pl | 1 - misc/perlmodule_rm.pl | 2 +- misc/translator/LangInstaller.pm | 2 +- misc/translator/TmplTokenizer.pm | 56 ++++++------- misc/translator/VerboseWarnings.pm | 24 +++--- misc/translator/text-extract.pl | 3 +- misc/translator/text-extract2.pl | 36 ++++----- misc/translator/tmpl_process3.pl | 81 +++++++++---------- misc/translator/xgettext.pl | 28 ++++--- opac/opac-MARCdetail.pl | 1 - opac/opac-alert-subscribe.pl | 1 - opac/opac-authorities-home.pl | 1 - opac/opac-authoritiesdetail.pl | 1 - opac/opac-basket.pl | 1 - opac/opac-search.pl | 5 -- opac/opac-serial-issues.pl | 2 - opac/opac-showreviews.pl | 1 - patroncards/create-pdf.pl | 10 +-- patroncards/image-manage.pl | 2 +- patroncards/print.pl | 12 +-- plugins/plugins-upload.pl | 2 +- reports/acquisitions_stats.pl | 1 - reports/bor_issues_top.pl | 26 +++--- reports/borrowers_out.pl | 7 +- reports/catalogue_out.pl | 2 - reports/catalogue_stats.pl | 5 -- reports/issues_avg_stats.pl | 5 -- reports/issues_stats.pl | 5 +- reports/reserves_stats.pl | 4 - rewrite-config.PL | 22 ++--- svc/holds | 1 - t/00-testcritic.t | 32 +------- t/Languages.t | 2 +- t/Prices.t | 4 +- t/SuggestionEngine.t | 2 +- t/db_dependent/Accounts.t | 1 - .../Acquisition/OrderFromSubscription.t | 3 +- t/db_dependent/Acquisition/OrderUsers.t | 1 - t/db_dependent/AdditionalField.t | 1 - t/db_dependent/Barcodes.t | 4 +- t/db_dependent/Context.t | 2 - t/db_dependent/Hold.t | 2 +- t/db_dependent/LDAP/test_ldap_add.pl | 2 +- t/db_dependent/Record/Record.t | 32 ++++---- t/db_dependent/Search.t | 12 +-- t/db_dependent/Serials.t | 1 - t/db_dependent/Serials_2.t | 1 - t/db_dependent/XISBN.t | 1 - t/db_dependent/www/auth_values_input_www.t | 1 - t/dummy.t | 1 + tags/review.pl | 6 +- test/search.pl | 1 + tools/batchMod.pl | 3 +- tools/export.pl | 2 - tools/import_borrowers.pl | 3 - tools/letter.pl | 2 +- tools/modborrowers.pl | 3 +- tools/overduerules.pl | 2 - tools/picture-upload.pl | 14 ++-- tools/upload-cover-image.pl | 6 +- xt/author/show-template-structure.pl | 6 +- xt/author/translatable-templates.t | 2 +- xt/find-license-problems | 5 +- xt/fix-old-fsf-address | 8 +- xt/single_quotes.t | 2 +- 131 files changed, 350 insertions(+), 448 deletions(-) rename t/perlcriticrc => .perlcriticrc (89%) diff --git a/t/perlcriticrc b/.perlcriticrc similarity index 89% rename from t/perlcriticrc rename to .perlcriticrc index bf0c9e4750..9a4dcf4f02 100644 --- a/t/perlcriticrc +++ b/.perlcriticrc @@ -10,3 +10,5 @@ equivalent_modules = Modern::Perl [TestingAndDebugging::RequireUseWarnings] equivalent_modules = Modern::Perl + +[-Modules::RequireBarewordIncludes] diff --git a/C4/Accounts.pm b/C4/Accounts.pm index f087ba6b1a..c470f8cfd9 100644 --- a/C4/Accounts.pm +++ b/C4/Accounts.pm @@ -266,7 +266,6 @@ sub manualinvoice { my $manager_id = 0; $manager_id = C4::Context->userenv->{'number'} if C4::Context->userenv; my $dbh = C4::Context->dbh; - my $insert; my $accountno = getnextacctno($borrowernumber); my $amountleft = $amount; diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm index 384b598e43..7831cc47e2 100644 --- a/C4/Acquisition.pm +++ b/C4/Acquisition.pm @@ -2291,7 +2291,6 @@ sub GetHistory { my $search_children_too = $params{search_children_too} || 0; my $created_by = $params{created_by} || []; - my @order_loop; my $total_qty = 0; my $total_qtyreceived = 0; my $total_price = 0; diff --git a/C4/Auth_with_cas.pm b/C4/Auth_with_cas.pm index 8cc8cde8ac..ecfe7ccf69 100644 --- a/C4/Auth_with_cas.pm +++ b/C4/Auth_with_cas.pm @@ -257,19 +257,19 @@ sub logout_if_required { my $params = C4::Auth::_get_session_params(); my $success = CGI::Session->find( $params->{dsn}, sub {delete_cas_session(@_, $ticket)}, $params->{dsn_args} ); - sub delete_cas_session { - my $session = shift; - my $ticket = shift; - if ($session->param('cas_ticket') && $session->param('cas_ticket') eq $ticket ) { - $session->delete; - $session->flush; - } - } - print $query->header; exit; } +sub delete_cas_session { + my $session = shift; + my $ticket = shift; + if ($session->param('cas_ticket') && $session->param('cas_ticket') eq $ticket ) { + $session->delete; + $session->flush; + } +} + 1; __END__ diff --git a/C4/AuthoritiesMarc.pm b/C4/AuthoritiesMarc.pm index 293f64b018..0be4c61837 100644 --- a/C4/AuthoritiesMarc.pm +++ b/C4/AuthoritiesMarc.pm @@ -119,7 +119,6 @@ sub SearchAuthorities { # the marclist may contain "mainentry". In this case, search the tag_to_report, that depends on # the authtypecode. Then, search on $a of this tag_to_report # also store main entry MARC tag, to extract it at end of search - my $mainentrytag; ##first set the authtype search and may be multiple authorities if ($authtypecode) { my $n=0; diff --git a/C4/Barcodes/ValueBuilder.pm b/C4/Barcodes/ValueBuilder.pm index 81747dee67..30e7be4aff 100644 --- a/C4/Barcodes/ValueBuilder.pm +++ b/C4/Barcodes/ValueBuilder.pm @@ -19,6 +19,8 @@ # along with Koha; if not, see . package C4::Barcodes::ValueBuilder::incremental; + +use Modern::Perl; use C4::Context; my $DEBUG = 0; diff --git a/C4/Barcodes/annual.pm b/C4/Barcodes/annual.pm index 1c8a432677..00853929f9 100644 --- a/C4/Barcodes/annual.pm +++ b/C4/Barcodes/annual.pm @@ -36,7 +36,7 @@ BEGIN { $width = 4; } -sub db_max ($;$) { +sub db_max { my $self = shift; my $query = "SELECT substring_index(barcode,'-',-1) AS chunk,barcode FROM items WHERE barcode LIKE ? ORDER BY chunk DESC LIMIT 1"; # FIXME: unreasonably expensive query on large datasets (I think removal of group by does this?) @@ -64,7 +64,7 @@ sub initial () { return substr(output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), 0, 4 ) .'-'. sprintf('%'."$width.$width".'d', 1); } -sub parse ($;$) { +sub parse { my $self = shift; my $barcode = (@_) ? shift : $self->value; unless ($barcode =~ /(\d{4}-)(\d+)$/) { # non-greedy match in first part @@ -74,12 +74,12 @@ sub parse ($;$) { $debug and warn "Barcode '$barcode' parses into: '$1', '$2', ''"; return ($1,$2,''); # the third part is in anticipation of barcodes that include checkdigits } -sub width ($;$) { +sub width { my $self = shift; (@_) and $width = shift; # hitting the class variable. return $width; } -sub process_head($$;$$) { # (self,head,whole,specific) +sub process_head { my ($self,$head,$whole,$specific) = @_; $specific and return $head; # if this is built off an existing barcode, just return the head unchanged. return substr(output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }), 0, 4 ) . '-'; # else get new YYYY- diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 0c5a917c6b..00344f67b4 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -2297,7 +2297,6 @@ sub TransformHtmlToXml { # MARC::Record->new_from_xml will fail (and Koha will die) my $unimarc_and_100_exist = 0; $unimarc_and_100_exist = 1 if $auth_type eq 'ITEM'; # if we rebuild an item, no need of a 100 field - my $prevvalue; my $prevtag = -1; my $first = 1; my $j = -1; diff --git a/C4/Breeding.pm b/C4/Breeding.pm index 37f450d39c..e805f4f9ef 100644 --- a/C4/Breeding.pm +++ b/C4/Breeding.pm @@ -551,8 +551,6 @@ sub Z3950SearchAuth { my $attr = ''; my $host; my $server; - my $database; - my $port; my $marcdata; my @encoding; my @results; diff --git a/C4/Circulation.pm b/C4/Circulation.pm index dce77eaaf7..2b004dfeb1 100644 --- a/C4/Circulation.pm +++ b/C4/Circulation.pm @@ -2328,7 +2328,6 @@ sub _FixOverduesOnReturn { )->next(); return 0 unless $accountline; # no warning, there's just nothing to fix - my $uquery; if ($exemptfine) { my $amountoutstanding = $accountline->amountoutstanding; diff --git a/C4/ClassSortRoutine.pm b/C4/ClassSortRoutine.pm index d5fd8a092e..77826cff1b 100644 --- a/C4/ClassSortRoutine.pm +++ b/C4/ClassSortRoutine.pm @@ -52,8 +52,8 @@ my @sort_routines = GetSortRoutineNames(); foreach my $sort_routine (@sort_routines) { if (eval "require C4::ClassSortRoutine::$sort_routine") { my $ref; - eval "\$ref = \\\&C4::ClassSortRoutine::${sort_routine}::get_class_sort_key"; - if (eval "\$ref->(\"a\", \"b\")") { + $ref = \&{"C4::ClassSortRoutine::${sort_routine}::get_class_sort_key"}; + if (eval { $ref->("a", "b") }) { $loaded_routines{$sort_routine} = $ref; } else { $loaded_routines{$sort_routine} = \&_get_class_sort_key; diff --git a/C4/Context.pm b/C4/Context.pm index 9b3f74dbb2..0d7e7173eb 100644 --- a/C4/Context.pm +++ b/C4/Context.pm @@ -247,7 +247,6 @@ sub new { } my $conf_cache = Koha::Caches->get_instance('config'); - my $config_from_cache; if ( $conf_cache->cache ) { $self = $conf_cache->get_from_cache('koha_conf'); } @@ -674,7 +673,6 @@ sub dbh { my $self = shift; my $params = shift; - my $sth; unless ( $params->{new} ) { return Koha::Database->schema->storage->dbh; diff --git a/C4/Creators.pm b/C4/Creators.pm index f73a6fc2f5..27043227f2 100644 --- a/C4/Creators.pm +++ b/C4/Creators.pm @@ -17,6 +17,8 @@ package C4::Creators; # You should have received a copy of the GNU General Public License # along with Koha; if not, see . +use Modern::Perl; + BEGIN { use vars qw(@EXPORT @ISA); @ISA = qw(Exporter); diff --git a/C4/Creators/Lib.pm b/C4/Creators/Lib.pm index 3c53498d1a..dbf15f471a 100644 --- a/C4/Creators/Lib.pm +++ b/C4/Creators/Lib.pm @@ -513,7 +513,7 @@ be passed off as a template parameter and used to build an html table. sub html_table { my $headers = shift; my $data = shift; - return undef if scalar(@$data) == 0; # no need to generate a table if there is not data to display + return if scalar(@$data) == 0; # no need to generate a table if there is not data to display my $table = []; my $fields = []; my @table_columns = (); diff --git a/C4/ImportBatch.pm b/C4/ImportBatch.pm index 99bc428701..02c635c849 100644 --- a/C4/ImportBatch.pm +++ b/C4/ImportBatch.pm @@ -1503,10 +1503,10 @@ sub RecordsFromISO2709File { my $marc_type = C4::Context->preference('marcflavour'); $marc_type .= 'AUTH' if ($marc_type eq 'UNIMARC' && $record_type eq 'auth'); - open IN, "<$input_file" or die "$0: cannot open input file $input_file: $!\n"; + open my $fh, '<', $input_file or die "$0: cannot open input file $input_file: $!\n"; my @marc_records; $/ = "\035"; - while () { + while (<$fh>) { s/^\s+//; s/\s+$//; next unless $_; # skip if record has only whitespace, as might occur @@ -1518,7 +1518,7 @@ sub RecordsFromISO2709File { "Unexpected charset $charset_guessed, expecting $encoding"; } } - close IN; + close $fh; return ( \@errors, \@marc_records ); } @@ -1561,15 +1561,15 @@ sub RecordsFromMarcPlugin { return \@return if !$input_file || !$plugin_class; # Read input file - open IN, "<$input_file" or die "$0: cannot open input file $input_file: $!\n"; + open my $fh, '<', $input_file or die "$0: cannot open input file $input_file: $!\n"; $/ = "\035"; - while () { + while (<$fh>) { s/^\s+//; s/\s+$//; next unless $_; $text .= $_; } - close IN; + close $fh; # Convert to large MARC blob with plugin $text = Koha::Plugins::Handler->run({ diff --git a/C4/InstallAuth.pm b/C4/InstallAuth.pm index 67319b3db6..4d84eea456 100644 --- a/C4/InstallAuth.pm +++ b/C4/InstallAuth.pm @@ -271,7 +271,6 @@ sub checkauth { $loggedin = 1; $userid = $session->param('cardnumber'); } - my ( $ip, $lasttime ); if ($logout) { diff --git a/C4/Labels.pm b/C4/Labels.pm index 428be02536..3e05b4af74 100644 --- a/C4/Labels.pm +++ b/C4/Labels.pm @@ -1,5 +1,7 @@ package C4::Labels; +use Modern::Perl; + BEGIN { use C4::Labels::Batch; diff --git a/C4/Labels/Label.pm b/C4/Labels/Label.pm index 8fe725fece..6266103bb6 100644 --- a/C4/Labels/Label.pm +++ b/C4/Labels/Label.pm @@ -216,7 +216,6 @@ sub _get_barcode_data { } elsif ( $f =~ /^([0-9a-z]{3})(\w)(\W?).*?/ ) { my ($field,$subf,$ws) = ($1,$2,$3); - my $subf_data; my ($itemtag, $itemsubfieldcode) = &GetMarcFromKohaField("items.itemnumber",''); my @marcfield = $record->field($field); if(@marcfield) { @@ -366,8 +365,8 @@ sub create_label { my $label_text = ''; my ($text_llx, $text_lly, $line_spacer, $barcode_llx, $barcode_lly, $barcode_width, $barcode_y_scale_factor); { - no strict 'refs'; - ($text_llx, $text_lly, $line_spacer, $barcode_llx, $barcode_lly, $barcode_width, $barcode_y_scale_factor) = &{"_$self->{'printing_type'}"}($self); # an obfuscated call to the correct printing type sub + my $sub = \&{'_' . $self->{printing_type}}; + ($text_llx, $text_lly, $line_spacer, $barcode_llx, $barcode_lly, $barcode_width, $barcode_y_scale_factor) = $sub->($self); # an obfuscated call to the correct printing type sub } if ($self->{'printing_type'} =~ /BIB/) { $label_text = draw_label_text( $self, diff --git a/C4/Languages.pm b/C4/Languages.pm index 1958c91628..1c14dab365 100644 --- a/C4/Languages.pm +++ b/C4/Languages.pm @@ -315,8 +315,6 @@ sub _build_languages_arrayref { my @languages_loop; # the final reference to an array of hashrefs my @enabled_languages = @$enabled_languages; # how many languages are enabled, if one, take note, some contexts won't need to display it - my %seen_languages; # the language tags we've seen - my %found_languages; my $language_groups; my $track_language_groups; my $current_language_regex = regex_lang_subtags($current_language); @@ -556,7 +554,7 @@ sub accept_language { } # No primary matches. Secondary? (ie, en-us requested and en supported) return $secondaryMatch if $secondaryMatch; - return undef; # else, we got nothing. + return; # else, we got nothing. } =head2 getlanguage diff --git a/C4/Letters.pm b/C4/Letters.pm index 52db4d0ac6..b13731327e 100644 --- a/C4/Letters.pm +++ b/C4/Letters.pm @@ -314,7 +314,6 @@ sub SendAlerts { or warn( "No biblionumber for '$subscriptionid'" ), return; - my %letter; # find the list of subscribers to notify my $subscription = Koha::Subscriptions->find( $subscriptionid ); my $subscribers = $subscription->subscribers; diff --git a/C4/Matcher.pm b/C4/Matcher.pm index 7209511d76..db2e30aa32 100644 --- a/C4/Matcher.pm +++ b/C4/Matcher.pm @@ -165,7 +165,7 @@ sub fetch { $sth->execute($id); my $row = $sth->fetchrow_hashref; $sth->finish(); - return undef unless defined $row; + return unless defined $row; my $self = {}; $self->{'id'} = $row->{'matcher_id'}; diff --git a/C4/Members/Messaging.pm b/C4/Members/Messaging.pm index 2270c3742e..5e51a39a0e 100644 --- a/C4/Members/Messaging.pm +++ b/C4/Members/Messaging.pm @@ -88,7 +88,6 @@ END_SQL my $sth = C4::Context->dbh->prepare($sql); $sth->execute(@bind_params); my $return; - my %transports; # helps build a list of unique message_transport_types ROW: while ( my $row = $sth->fetchrow_hashref() ) { next ROW unless $row->{'message_attribute_id'}; $return->{'days_in_advance'} = $row->{'days_in_advance'} if defined $row->{'days_in_advance'}; diff --git a/C4/Patroncards.pm b/C4/Patroncards.pm index 348a783674..98fb59c28b 100644 --- a/C4/Patroncards.pm +++ b/C4/Patroncards.pm @@ -1,5 +1,7 @@ package C4::Patroncards; +use Modern::Perl; + BEGIN { use vars qw(@EXPORT @ISA); @ISA = qw(Exporter); diff --git a/C4/Patroncards/Patroncard.pm b/C4/Patroncards/Patroncard.pm index 559d10d921..ee33a14875 100644 --- a/C4/Patroncards/Patroncard.pm +++ b/C4/Patroncards/Patroncard.pm @@ -227,11 +227,13 @@ sub draw_text { $parse_line = $2; } my $borrower_attributes = get_borrower_attributes($self->{'borrower_number'},@fields); - grep{ # substitute data for db fields - if ($_ =~ m/<([A-Za-z0-9_]+)>/) { + @orig_line = map { # substitute data for db fields + my $l = $_; + if ($l =~ m/<([A-Za-z0-9_]+)>/) { my $field = $1; - $_ =~ s/$_/$borrower_attributes->{$field}/; + $l =~ s/$l/$borrower_attributes->{$field}/; } + $l; } @orig_line; $line = join(' ',@orig_line); } diff --git a/C4/Record.pm b/C4/Record.pm index 174731dc4f..7874a9e043 100644 --- a/C4/Record.pm +++ b/C4/Record.pm @@ -377,7 +377,6 @@ sub marc2endnote { Year => $marc_rec_obj->publication_date, Abstract => $abstract, }; - my $endnote; my $style = new Biblio::EndnoteStyle(); my $template; $template.= "DB - DB\n" if C4::Context->preference("LibraryName"); @@ -422,7 +421,7 @@ sub marc2csv { } # Preprocessing - eval $preprocess if ($preprocess); + eval $preprocess if ($preprocess); ## no critic (StringyEval) my $firstpass = 1; if ( @$itemnumbers ) { @@ -440,7 +439,7 @@ sub marc2csv { } # Postprocessing - eval $postprocess if ($postprocess); + eval $postprocess if ($postprocess); ## no critic (StringyEval) return $output; } @@ -574,7 +573,6 @@ sub marcrecord2csv { if ( $content =~ m|\[\%.*\%\]| ) { my $tt = Template->new(); my $template = $content; - my $vars; # Replace 00X and 0XX with X or XX $content =~ s|fields.00(\d)|fields.$1|g; $content =~ s|fields.0(\d{2})|fields.$1|g; @@ -623,7 +621,7 @@ sub marcrecord2csv { # Field processing my $marcfield = $tag->{fieldtag}; # This line fixes a retrocompatibility concern # The "processing" could be based on the $marcfield variable. - eval $fieldprocessing if ($fieldprocessing); + eval $fieldprocessing if ($fieldprocessing); ## no critic (StringyEval) push @loop_values, $value; } diff --git a/C4/Ris.pm b/C4/Ris.pm index f244bf694d..de8dccc43c 100644 --- a/C4/Ris.pm +++ b/C4/Ris.pm @@ -90,7 +90,6 @@ C<$record> - a MARC::Record object sub marc2ris { my ($record) = @_; - my $output; my $marcflavour = C4::Context->preference("marcflavour"); my $intype = lc($marcflavour); diff --git a/C4/Search.pm b/C4/Search.pm index 06e837de03..51d427c525 100644 --- a/C4/Search.pm +++ b/C4/Search.pm @@ -88,9 +88,6 @@ sub FindDuplicate { my $result = TransformMarcToKoha( $record, '' ); my $sth; my $query; - my $search; - my $type; - my ( $biblionumber, $title ); # search duplicate on ISBN, easy and fast.. # ... normalize first @@ -335,7 +332,6 @@ sub getRecords { $offset = 0 if $offset < 0; # Initialize variables for the ZOOM connection and results object - my $zconn; my @zconns; my @results; my $results_hashref = (); @@ -454,7 +450,6 @@ sub getRecords { } for ( my $j = $offset ; $j < $times ; $j++ ) { - my $records_hash; my $record; ## Check if it's an index scan diff --git a/C4/Serials.pm b/C4/Serials.pm index 0eb699fc45..0d1ffdd236 100644 --- a/C4/Serials.pm +++ b/C4/Serials.pm @@ -321,10 +321,13 @@ sub GetFullSubscription { my $sth = $dbh->prepare($query); $sth->execute($subscriptionid); my $subscriptions = $sth->fetchall_arrayref( {} ); - my $cannotedit = not can_edit_subscription( $subscriptions->[0] ) if scalar @$subscriptions; - for my $subscription ( @$subscriptions ) { - $subscription->{cannotedit} = $cannotedit; + if (scalar @$subscriptions) { + my $cannotedit = not can_edit_subscription( $subscriptions->[0] ); + for my $subscription ( @$subscriptions ) { + $subscription->{cannotedit} = $cannotedit; + } } + return $subscriptions; } @@ -344,9 +347,6 @@ sub PrepareSerialsData { my $year; my @res; my $startdate; - my $aqbooksellername; - my $bibliotitle; - my @loopissues; my $first; my $previousnote = ""; @@ -481,10 +481,13 @@ sub GetFullSubscriptionsFromBiblionumber { my $sth = $dbh->prepare($query); $sth->execute($biblionumber); my $subscriptions = $sth->fetchall_arrayref( {} ); - my $cannotedit = not can_edit_subscription( $subscriptions->[0] ) if scalar @$subscriptions; - for my $subscription ( @$subscriptions ) { - $subscription->{cannotedit} = $cannotedit; + if (scalar @$subscriptions) { + my $cannotedit = not can_edit_subscription( $subscriptions->[0] ); + for my $subscription ( @$subscriptions ) { + $subscription->{cannotedit} = $cannotedit; + } } + return $subscriptions; } diff --git a/C4/Templates.pm b/C4/Templates.pm index 343a374199..bad3275959 100644 --- a/C4/Templates.pm +++ b/C4/Templates.pm @@ -118,7 +118,7 @@ sub output { $vars = { %$vars, %{ $self->{VARS} } }; my $data; - binmode( STDOUT, ":utf8" ); + binmode( STDOUT, ":encoding(UTF-8)" ); $template->process( $self->filename, $vars, \$data ) || die "Template process failed: ", $template->error(); return $data; diff --git a/Makefile.PL b/Makefile.PL index 924782f188..62bc670f69 100644 --- a/Makefile.PL +++ b/Makefile.PL @@ -863,8 +863,8 @@ sub get_install_log_values { my $install_log = shift; my $values = shift; - open LOG, "<$install_log" or die "Cannot open install log $install_log: $!\n"; - while () { + open my $log, '<', $install_log or die "Cannot open install log $install_log: $!\n"; + while (<$log>) { chomp; next if /^#/ or /^\s*$/; next if /^=/; @@ -873,7 +873,7 @@ sub get_install_log_values { my ($key, $value) = split /=/, $_, 2; $values->{$key} = $value; } - close LOG; + close $log; print <<_EXPLAIN_INSTALL_LOG_; Reading values from install log $install_log. You diff --git a/docs/CAS/CASProxy/examples/koha_webservice.pl b/docs/CAS/CASProxy/examples/koha_webservice.pl index dbaa19ef2e..c0b5abe206 100755 --- a/docs/CAS/CASProxy/examples/koha_webservice.pl +++ b/docs/CAS/CASProxy/examples/koha_webservice.pl @@ -33,7 +33,7 @@ The Proxy Ticket, needed for check_api_auth, that will try to make the CAS Serve use utf8; use Modern::Perl; -binmode(STDOUT, ":utf8"); +binmode(STDOUT, ":encoding(UTF-8)"); use C4::Auth qw(check_api_auth); use C4::Output; diff --git a/docs/CAS/CASProxy/examples/proxy_cas_callback.pl b/docs/CAS/CASProxy/examples/proxy_cas_callback.pl index 4ee46b5c2d..fdda4274f0 100755 --- a/docs/CAS/CASProxy/examples/proxy_cas_callback.pl +++ b/docs/CAS/CASProxy/examples/proxy_cas_callback.pl @@ -49,9 +49,9 @@ if ($cgi->param('pgtId')) { # Now we store the pgtIou and the pgtId in the application vars (in our case a storable object in a file), # so that the page requesting the webservice can retrieve the pgtId matching it's PgtIou - open FILE, ">", "casSession.tmp" or die "Unable to open file"; - nstore_fd({$pgtIou => $pgtId}, \*FILE); - close FILE; + open my $fh, ">", "casSession.tmp" or die "Unable to open file"; + nstore_fd({$pgtIou => $pgtId}, $fh); + close $fh; } else { warn "Failed to get a Proxy Ticket\n"; diff --git a/docs/CAS/CASProxy/examples/proxy_cas_data.pl b/docs/CAS/CASProxy/examples/proxy_cas_data.pl index 34f4ce07d1..70ea24cfe6 100755 --- a/docs/CAS/CASProxy/examples/proxy_cas_data.pl +++ b/docs/CAS/CASProxy/examples/proxy_cas_data.pl @@ -54,10 +54,10 @@ if ($cgi->param('PGTIOU')) { # At this point, we must retrieve the PgtId by matching the PgtIou we # just received and the PgtIou given by the CAS Server to the callback URL # The callback page stored it in the application vars (in our case a storable object in a file) - open FILE, "casSession.tmp" or die "Unable to open file"; - my $hashref = fd_retrieve(\*FILE); + open my $fh, '<', "casSession.tmp" or die "Unable to open file"; + my $hashref = fd_retrieve($fh); my $pgtId = %{$hashref->{$cgi->param('PGTIOU')}}; - close FILE; + close $fh; # Now that we have a PgtId, we can ask the cas server for a proxy ticket... my $rp = $cas->proxy( $pgtId, $target_service ); diff --git a/fix-perl-path.PL b/fix-perl-path.PL index c36381d783..2adfa35faa 100644 --- a/fix-perl-path.PL +++ b/fix-perl-path.PL @@ -77,8 +77,8 @@ sub fixshebang{ # to make it writable. Note that stat and chmod # (the Perl functions) should work on Win32 my $old_perm; - $old_perm = (stat $pathfile)[2] & 07777; - my $new_perm = $old_perm | 0200; + $old_perm = (stat $pathfile)[2] & oct(7777); + my $new_perm = $old_perm | oct(200); chmod $new_perm, $pathfile; # tie the file -- note that we're explicitly setting the line (record) diff --git a/install-CPAN.pl b/install-CPAN.pl index 43555ca38e..a85dfbc060 100644 --- a/install-CPAN.pl +++ b/install-CPAN.pl @@ -1,5 +1,7 @@ # cpan_install.pl - Install prerequisites from CPAN then Koha +use Modern::Perl; + ($ARGV[0] =~ /koha-.*z/) || die " Run this as the CPAN-owning user (usually root) with: perl $0 path/to/koha.tgz diff --git a/installer/data/mysql/labels_upgrade.pl b/installer/data/mysql/labels_upgrade.pl index 158a4ec118..bb891b459c 100755 --- a/installer/data/mysql/labels_upgrade.pl +++ b/installer/data/mysql/labels_upgrade.pl @@ -17,8 +17,7 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; use C4::Context; diff --git a/installer/data/mysql/patroncards_upgrade.pl b/installer/data/mysql/patroncards_upgrade.pl index 5b128cde0a..d289cb54db 100755 --- a/installer/data/mysql/patroncards_upgrade.pl +++ b/installer/data/mysql/patroncards_upgrade.pl @@ -17,8 +17,7 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; use C4::Context; diff --git a/installer/data/mysql/update22to30.pl b/installer/data/mysql/update22to30.pl index f10ace95c5..abaf881c23 100755 --- a/installer/data/mysql/update22to30.pl +++ b/installer/data/mysql/update22to30.pl @@ -36,7 +36,6 @@ my ( $table, $column, $type, $null, $key, $default, $extra, - $prefitem, # preference item in systempreferences table ); my $silent; @@ -3049,7 +3048,7 @@ my $DBversion = "3.00.00.000"; ], ); - foreach $table ( keys %required_prereq_fields ) { + foreach my $table ( keys %required_prereq_fields ) { print "Check table $table\n" if $debug and not $silent; $sth = $dbh->prepare("show columns from $table"); $sth->execute(); @@ -3158,7 +3157,7 @@ my $DBversion = "3.00.00.000"; # Now add any missing tables - foreach $table ( keys %requiretables ) { + foreach my $table ( keys %requiretables ) { unless ( $existingtables{$table} ) { print "Adding $table table...\n" unless $silent; my $sth = $dbh->prepare("create table $table $requiretables{$table} ENGINE=InnoDB DEFAULT CHARSET=utf8"); @@ -3173,7 +3172,7 @@ my $DBversion = "3.00.00.000"; #--------------------------------- # Columns - foreach $table ( keys %requirefields ) { + foreach my $table ( keys %requirefields ) { print "Check table $table\n" if $debug and not $silent; $sth = $dbh->prepare("show columns from $table"); $sth->execute(); @@ -3182,7 +3181,7 @@ my $DBversion = "3.00.00.000"; { $types{$column} = $type; } # while - foreach $column ( keys %{ $requirefields{$table} } ) { + foreach my $column ( keys %{ $requirefields{$table} } ) { print " Check column $column [$types{$column}]\n" if $debug and not $silent; if ( !$types{$column} ) { @@ -3201,7 +3200,7 @@ my $DBversion = "3.00.00.000"; } # foreach column } # foreach table - foreach $table ( sort keys %fielddefinitions ) { + foreach my $table ( sort keys %fielddefinitions ) { print "Check table $table\n" if $debug; $sth = $dbh->prepare("show columns from $table"); $sth->execute(); @@ -3455,7 +3454,7 @@ my $DBversion = "3.00.00.000"; } } # now drop useless tables - foreach $table ( @TableToDelete ) { + foreach my $table ( @TableToDelete ) { if ( $existingtables{$table} ) { print "Dropping unused table $table\n" if $debug and not $silent; $dbh->do("drop table $table"); @@ -3500,9 +3499,8 @@ my $DBversion = "3.00.00.000"; } # at last, remove useless fields - foreach $table ( keys %uselessfields ) { + foreach my $table ( keys %uselessfields ) { my @fields = split (/,/,$uselessfields{$table}); - my $fields; my $exists; foreach my $fieldtodrop (@fields) { $fieldtodrop =~ s/\t//g; diff --git a/installer/data/mysql/updatedatabase.pl b/installer/data/mysql/updatedatabase.pl index a26dee6edd..a369e1f552 100755 --- a/installer/data/mysql/updatedatabase.pl +++ b/installer/data/mysql/updatedatabase.pl @@ -54,14 +54,10 @@ use File::Slurp; my $debug = 0; my ( - $sth, $sti, + $sth, $query, - %existingtables, # tables already in database - %types, $table, - $column, - $type, $null, $key, $default, $extra, - $prefitem, # preference item in systempreferences table + $type, ); my $schema = Koha::Database->new()->schema(); @@ -16433,7 +16429,7 @@ foreach my $file ( sort readdir $dirh ) { my $rv = $installer->load_sql( $update_dir . $file ) ? 0 : 1; } elsif ( $file =~ /\.perl$/ ) { my $code = read_file( $update_dir . $file ); - eval $code; + eval $code; ## no critic (StringyEval) say "Atomic update generated errors: $@" if $@; } } diff --git a/installer/externalmodules.pl b/installer/externalmodules.pl index 42eb4b7ef1..259885a4b8 100755 --- a/installer/externalmodules.pl +++ b/installer/externalmodules.pl @@ -13,9 +13,9 @@ qx(grep -r "^ *use" $dir | grep -v "C4\|strict\|vars" >/tmp/modulesKoha.log); $dir=C4::Context->config('opacdir'); qx(grep -r "^ *use" $dir | grep -v "C4\|strict\|vars" >>/tmp/modulesKoha.log); -open FILE, "< /tmp/modulesKoha.log" ||die "unable to open file /tmp/modulesKoha.log"; +open my $fh, '<', '/tmp/modulesKoha.log' ||die "unable to open file /tmp/modulesKoha.log"; my %modulehash; -while (my $line=){ +while (my $line=<$fh>){ if ( $line=~m#(.*)\:\s*use\s+([A-Z][^\s;]+)# ){ my ($file,$module)=($1,$2); my @filename = split /\//, $file; @@ -24,5 +24,5 @@ while (my $line=){ } print "external modules used in Koha ARE :\n"; map {print "* $_ \t in files ",join (",",@{$modulehash{$_}}),"\n" } sort keys %modulehash; -close FILE; +close $fh; unlink "/tmp/modulesKoha.log"; diff --git a/misc/admin/koha-preferences b/misc/admin/koha-preferences index 15b79391b3..47a292e04e 100755 --- a/misc/admin/koha-preferences +++ b/misc/admin/koha-preferences @@ -18,6 +18,7 @@ # along with Koha; if not, see . # +use Modern::Perl; use C4::Boolean; use C4::Context; use C4::Debug; diff --git a/misc/batchRepairMissingBiblionumbers.pl b/misc/batchRepairMissingBiblionumbers.pl index ca8064c523..3f0975e975 100755 --- a/misc/batchRepairMissingBiblionumbers.pl +++ b/misc/batchRepairMissingBiblionumbers.pl @@ -18,7 +18,6 @@ use C4::Biblio; my $dbh = C4::Context->dbh; -my %kohafields; my $sth=$dbh->prepare("SELECT biblio.biblionumber, biblioitemnumber, frameworkcode FROM biblio JOIN biblioitems USING (biblionumber)"); $sth->execute(); diff --git a/misc/batchdeletebiblios.pl b/misc/batchdeletebiblios.pl index 9bc999a489..d4219671cf 100755 --- a/misc/batchdeletebiblios.pl +++ b/misc/batchdeletebiblios.pl @@ -7,7 +7,7 @@ use IO::File; use C4::Biblio; -my ($help, $files); +my $help; GetOptions( 'h|help' => \$help, ); diff --git a/misc/bin/connexion_import_daemon.pl b/misc/bin/connexion_import_daemon.pl index bc40cb4e96..22407eb2a8 100755 --- a/misc/bin/connexion_import_daemon.pl +++ b/misc/bin/connexion_import_daemon.pl @@ -132,6 +132,7 @@ sub parse_config { die "Invalid config line $line: $_" unless defined $v; $param{$p} = $v; } + close($conf_fh); $self->{koha} = delete( $param{koha} ) or die "No koha base url in config file"; diff --git a/misc/check_sysprefs.pl b/misc/check_sysprefs.pl index 91d007511e..4e91182871 100755 --- a/misc/check_sysprefs.pl +++ b/misc/check_sysprefs.pl @@ -21,8 +21,8 @@ sub check_sys_pref { if ( !-d _ ) { my $name = $File::Find::name; if ( $name =~ /(\.pl|\.pm)$/ ) { - open( FILE, "$_" ) || die "cant open $name"; - while ( my $inp = ) { + open( my $fh, '<', $_ ) || die "cant open $name"; + while ( my $inp = <$fh> ) { if ( $inp =~ /C4::Context->preference\((.*?)\)/ ) { my $variable = $1; $variable =~ s /\'|\"//g; @@ -36,7 +36,7 @@ sub check_sys_pref { "$name has a reference to $variable, this does not exist in the database\n"; } } - close FILE; + close $fh; } } $sth->finish(); diff --git a/misc/cronjobs/build_browser_and_cloud.pl b/misc/cronjobs/build_browser_and_cloud.pl index d5e0d1a8f5..69308a4348 100755 --- a/misc/cronjobs/build_browser_and_cloud.pl +++ b/misc/cronjobs/build_browser_and_cloud.pl @@ -21,7 +21,7 @@ use Getopt::Long; use C4::Log; my ( $input_marc_file, $number) = ('',0); -my ($version, $confirm,$test_parameter,$field,$batch,$max_digits,$cloud_tag); +my ($version, $confirm,$field,$batch,$max_digits,$cloud_tag); GetOptions( 'c' => \$confirm, 'h' => \$version, diff --git a/misc/cronjobs/gather_print_notices.pl b/misc/cronjobs/gather_print_notices.pl index cb1aecf94d..35d79ad095 100755 --- a/misc/cronjobs/gather_print_notices.pl +++ b/misc/cronjobs/gather_print_notices.pl @@ -24,7 +24,6 @@ use Koha::DateUtils; use MIME::Lite; my ( - $stylesheet, $help, $split, $html, @@ -230,7 +229,7 @@ sub generate_csv { open my $OUTPUT, '>encoding(utf-8)', $filepath or die "Could not open $filepath: $!"; - my ( @csv_lines, $headers ); + my $headers; foreach my $message ( @$messages ) { my @lines = split /\n/, $message->{content}; chomp for @lines; diff --git a/misc/cronjobs/holds/cancel_expired_holds.pl b/misc/cronjobs/holds/cancel_expired_holds.pl index f721553bb5..a70dbe1948 100755 --- a/misc/cronjobs/holds/cancel_expired_holds.pl +++ b/misc/cronjobs/holds/cancel_expired_holds.pl @@ -17,8 +17,7 @@ # You should have received a copy of the GNU General Public License # along with Koha; if not, see . -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; BEGIN { # find Koha's Perl modules diff --git a/misc/cronjobs/longoverdue.pl b/misc/cronjobs/longoverdue.pl index f8fd871b1f..4377e03b28 100755 --- a/misc/cronjobs/longoverdue.pl +++ b/misc/cronjobs/longoverdue.pl @@ -233,7 +233,7 @@ cronlogaction(); # In my opinion, this line is safe SQL to have outside the API. --atz our $bounds_sth = C4::Context->dbh->prepare("SELECT DATE_SUB(CURDATE(), INTERVAL ? DAY)"); -sub bounds ($) { +sub bounds { $bounds_sth->execute(shift); return $bounds_sth->fetchrow; } @@ -332,10 +332,10 @@ foreach my $startrange (sort keys %$lost) { $endrange = $startrange; } -sub summarize ($$) { +sub summarize { my $arg = shift; # ref to array my $got_items = shift || 0; # print "count" line for items - my @report = @$arg or return undef; + my @report = @$arg or return; my $i = 0; for my $range (@report) { printf "\nRange %s\nDue %3s - %3s days ago (%s to %s), lost => %s\n", ++$i, diff --git a/misc/cronjobs/rss/rss.pl b/misc/cronjobs/rss/rss.pl index 60e34fb04d..f8874449cb 100755 --- a/misc/cronjobs/rss/rss.pl +++ b/misc/cronjobs/rss/rss.pl @@ -72,8 +72,8 @@ sub getConf { my %return; my $inSection = 0; - open( FILE, $file ) or die "can't open $file"; - while () { + open( my $fh, '<', $file ) or die "can't open $file"; + while (<$fh>) { if ($inSection) { my @line = split( /=/, $_, 2 ); unless ( $line[1] ) { @@ -89,7 +89,7 @@ sub getConf { if ( $_ eq "$section\n" ) { $inSection = 1 } } } - close FILE; + close $fh; return %return; } diff --git a/misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl b/misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl index 1a70c4ae90..fd39ffaf5f 100755 --- a/misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl +++ b/misc/cronjobs/thirdparty/TalkingTech_itiva_inbound.pl @@ -76,6 +76,7 @@ if ( defined $infile ) { $updated += $result; $total++; } + close($IN); } else { die pod2usage( -verbose => 1 ); diff --git a/misc/cronjobs/update_totalissues.pl b/misc/cronjobs/update_totalissues.pl index affa2a7e34..78a6061f0b 100755 --- a/misc/cronjobs/update_totalissues.pl +++ b/misc/cronjobs/update_totalissues.pl @@ -69,7 +69,7 @@ my $result = GetOptions( 'h|help' => \$want_help ); -binmode( STDOUT, ":utf8" ); +binmode( STDOUT, ":encoding(UTF-8)" ); if ( defined $since && defined $interval ) { print "The --since and --interval options are mutually exclusive.\n\n"; diff --git a/misc/devel/populate_db.pl b/misc/devel/populate_db.pl index e419e3743b..ddf6976f19 100755 --- a/misc/devel/populate_db.pl +++ b/misc/devel/populate_db.pl @@ -189,7 +189,7 @@ sub update_database { if $verbose; my $file = `cat $update_db_path`; $file =~ s/exit;//; - eval $file; + eval $file; ## no critic (StringyEval) if ($@) { die "updatedatabase.pl process failed: $@"; } else { diff --git a/misc/exportauth.pl b/misc/exportauth.pl index d6236d21a9..bb173c058a 100755 --- a/misc/exportauth.pl +++ b/misc/exportauth.pl @@ -16,7 +16,7 @@ use C4::Context; use C4::Biblio; use C4::Auth; my $outfile = $ARGV[0]; -open(OUT,">$outfile") or die $!; +open(my $fh, '>', $outfile) or die $!; my $dbh=C4::Context->dbh; #$dbh->do("set character_set_client='latin5'"); $dbh->do("set character_set_connection='utf8'"); @@ -24,6 +24,6 @@ $dbh->do("set character_set_connection='utf8'"); my $sth=$dbh->prepare("select marc from auth_header order by authid"); $sth->execute(); while (my ($marc) = $sth->fetchrow) { - print OUT $marc; + print $fh $marc; } -close(OUT); +close($fh); diff --git a/misc/link_bibs_to_authorities.pl b/misc/link_bibs_to_authorities.pl index b139a7666b..c35abf9445 100755 --- a/misc/link_bibs_to_authorities.pl +++ b/misc/link_bibs_to_authorities.pl @@ -46,7 +46,7 @@ my $result = GetOptions( 'h|help' => \$want_help ); -binmode( STDOUT, ":utf8" ); +binmode( STDOUT, ":encoding(UTF-8)" ); if ( not $result or $want_help ) { usage(); diff --git a/misc/maintenance/cmp_sysprefs.pl b/misc/maintenance/cmp_sysprefs.pl index 936d3c63f6..4477ee7068 100755 --- a/misc/maintenance/cmp_sysprefs.pl +++ b/misc/maintenance/cmp_sysprefs.pl @@ -33,7 +33,7 @@ use Pod::Usage; use C4::Context; my $dbh = C4::Context->dbh; -my ( $help, $cmd, $filename, $override, $compare_add, $compare_del, $compare_upd, $ignore_opt, $partial ); +my ( $help, $cmd, $filename, $compare_add, $compare_del, $compare_upd, $ignore_opt, $partial ); GetOptions( 'help' => \$help, 'cmd:s' => \$cmd, diff --git a/misc/maintenance/fix_accountlines_rmdupfines_bug8253.pl b/misc/maintenance/fix_accountlines_rmdupfines_bug8253.pl index a22c36dd27..7a9bcb81da 100755 --- a/misc/maintenance/fix_accountlines_rmdupfines_bug8253.pl +++ b/misc/maintenance/fix_accountlines_rmdupfines_bug8253.pl @@ -75,7 +75,6 @@ $query = "SELECT * FROM accountlines WHERE description LIKE ? AND description NOT LIKE ?"; $sth = $dbh->prepare($query); -my @fines; foreach my $keeper (@$results) { warn "WORKING ON KEEPER: " . Data::Dumper::Dumper( $keeper ); diff --git a/misc/maintenance/touch_all_biblios.pl b/misc/maintenance/touch_all_biblios.pl index b6a5addf38..30cc8e6052 100755 --- a/misc/maintenance/touch_all_biblios.pl +++ b/misc/maintenance/touch_all_biblios.pl @@ -67,10 +67,11 @@ if ($whereclause) { } # output log or STDOUT +my $fh; if (defined $outfile) { - open (OUT, ">$outfile") || die ("Cannot open output file"); + open ($fh, '>', $outfile) || die ("Cannot open output file"); } else { - open(OUT, ">&STDOUT") || die ("Couldn't duplicate STDOUT: $!"); + open($fh, '>&', \*STDOUT) || die ("Couldn't duplicate STDOUT: $!"); } my $sth1 = $dbh->prepare("SELECT biblionumber, frameworkcode FROM biblio $whereclause"); @@ -84,15 +85,16 @@ while (my ($biblionumber, $frameworkcode) = $sth1->fetchrow_array){ if ($modok) { $goodcount++; - print OUT "Touched biblio $biblionumber\n" if (defined $verbose); + print $fh "Touched biblio $biblionumber\n" if (defined $verbose); } else { $badcount++; - print OUT "ERROR WITH BIBLIO $biblionumber !!!!\n"; + print $fh "ERROR WITH BIBLIO $biblionumber !!!!\n"; } $totalcount++; } +close($fh); # Benchmarking my $endtime = time(); diff --git a/misc/maintenance/touch_all_items.pl b/misc/maintenance/touch_all_items.pl index 12dca00070..21a44d263e 100755 --- a/misc/maintenance/touch_all_items.pl +++ b/misc/maintenance/touch_all_items.pl @@ -67,10 +67,11 @@ if ($whereclause) { } # output log or STDOUT +my $fh; if (defined $outfile) { - open (OUT, ">$outfile") || die ("Cannot open output file"); + open ($fh, '>', $outfile) || die ("Cannot open output file"); } else { - open(OUT, ">&STDOUT") || die ("Couldn't duplicate STDOUT: $!"); + open($fh, '>&', \*STDOUT) || die ("Couldn't duplicate STDOUT: $!"); } my $sth_fetch = $dbh->prepare("SELECT biblionumber, itemnumber, itemcallnumber FROM items $whereclause"); @@ -84,15 +85,16 @@ while (my ($biblionumber, $itemnumber, $itemcallnumber) = $sth_fetch->fetchrow_a if ($modok) { $goodcount++; - print OUT "Touched item $itemnumber\n" if (defined $verbose); + print $fh "Touched item $itemnumber\n" if (defined $verbose); } else { $badcount++; - print OUT "ERROR WITH ITEM $itemnumber !!!!\n"; + print $fh "ERROR WITH ITEM $itemnumber !!!!\n"; } $totalcount++; } +close($fh); # Benchmarking my $endtime = time(); diff --git a/misc/migration_tools/22_to_30/export_Authorities.pl b/misc/migration_tools/22_to_30/export_Authorities.pl index aeed3f2fa0..956805a2d9 100755 --- a/misc/migration_tools/22_to_30/export_Authorities.pl +++ b/misc/migration_tools/22_to_30/export_Authorities.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; BEGIN { # find Koha's Perl modules # test carefully before changing this @@ -32,7 +31,7 @@ while (my ($authid,$authtypecode)=$rq->fetchrow){ if (C4::Context->preference('marcflavour') eq "UNIMARC"){ $record->leader(' nac 22 1u 4500'); - my $string=$1 if $time=~m/([0-9\-]+)/; + my $string= ($time=~m/([0-9\-]+)/) ? $1 : undef $string=~s/\-//g; $string = sprintf("%-*s",26, $string); substr($string,9,6,"frey50"); diff --git a/misc/migration_tools/22_to_30/export_Authorities_xml.pl b/misc/migration_tools/22_to_30/export_Authorities_xml.pl index 42d2e5c0ae..c8a5aa9d63 100755 --- a/misc/migration_tools/22_to_30/export_Authorities_xml.pl +++ b/misc/migration_tools/22_to_30/export_Authorities_xml.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; BEGIN { # find Koha's Perl modules # test carefully before changing this @@ -31,7 +30,7 @@ open my $fileoutput, '>:encoding(UTF-8)', "./$filename/$authid.xml" or die "unab # if (C4::Context->preference('marcflavour') eq "UNIMARC"){ $record->leader(' nac 22 1u 4500'); - my $string=$1 if $time=~m/([0-9\-]+)/; + my $string = ($time=~m/([0-9\-]+)/) ? $1 : undef $string=~s/\-//g; $string = sprintf("%-*s",26, $string); substr($string,9,6,"frey50"); diff --git a/misc/migration_tools/22_to_30/move_marc_to_biblioitems.pl b/misc/migration_tools/22_to_30/move_marc_to_biblioitems.pl index 3635dbc386..38ea2897c2 100755 --- a/misc/migration_tools/22_to_30/move_marc_to_biblioitems.pl +++ b/misc/migration_tools/22_to_30/move_marc_to_biblioitems.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; # script to shift marc to biblioitems # scraped from updatedatabase for dev week by chris@katipo.co.nz BEGIN { diff --git a/misc/migration_tools/buildCOUNTRY.pl b/misc/migration_tools/buildCOUNTRY.pl index 5cd2da49bf..f27a90c586 100755 --- a/misc/migration_tools/buildCOUNTRY.pl +++ b/misc/migration_tools/buildCOUNTRY.pl @@ -13,7 +13,7 @@ use Time::HiRes qw(gettimeofday); use Getopt::Long; my ( $fields, $number,$language) = ('',0); -my ($version, $verbose, $test_parameter, $field,$delete,$subfields); +my ($version, $verbose, $test_parameter, $delete); GetOptions( 'h' => \$version, 'd' => \$delete, diff --git a/misc/migration_tools/buildEDITORS.pl b/misc/migration_tools/buildEDITORS.pl index f5e1a71099..7b21a29a63 100755 --- a/misc/migration_tools/buildEDITORS.pl +++ b/misc/migration_tools/buildEDITORS.pl @@ -66,7 +66,6 @@ my $starttime = gettimeofday; my $sth = $dbh->prepare("select bibid from marc_biblio"); $sth->execute; my $i=1; -my %alreadydone; my $counter; my %hash; while (my ($bibid) = $sth->fetchrow) { diff --git a/misc/migration_tools/buildLANG.pl b/misc/migration_tools/buildLANG.pl index 18c27ace7f..9c7f2f739f 100755 --- a/misc/migration_tools/buildLANG.pl +++ b/misc/migration_tools/buildLANG.pl @@ -13,7 +13,7 @@ use Time::HiRes qw(gettimeofday); use Getopt::Long; my ( $fields, $number,$language) = ('',0); -my ($version, $verbose, $test_parameter, $field,$delete,$subfields); +my ($version, $verbose, $test_parameter, $delete); GetOptions( 'h' => \$version, 'd' => \$delete, diff --git a/misc/migration_tools/bulkmarcimport.pl b/misc/migration_tools/bulkmarcimport.pl index d820d3e991..f3f2472e3e 100755 --- a/misc/migration_tools/bulkmarcimport.pl +++ b/misc/migration_tools/bulkmarcimport.pl @@ -146,8 +146,9 @@ if($marc_mod_template ne '') { my $dbh = C4::Context->dbh; my $heading_fields=get_heading_fields(); +my $idmapfh; if (defined $idmapfl) { - open(IDMAP,">$idmapfl") or die "cannot open $idmapfl \n"; + open($idmapfh, '>', $idmapfl) or die "cannot open $idmapfl \n"; } if ((not defined $sourcesubfield) && (not defined $sourcetag)){ @@ -441,11 +442,11 @@ RECORD: while ( ) { if ($sourcetag < "010"){ if ($record->field($sourcetag)){ my $source = $record->field($sourcetag)->data(); - printf(IDMAP "%s|%s\n",$source,$biblionumber); + printf($idmapfh "%s|%s\n",$source,$biblionumber); } } else { my $source=$record->subfield($sourcetag,$sourcesubfield); - printf(IDMAP "%s|%s\n",$source,$biblionumber); + printf($idmapfh "%s|%s\n",$source,$biblionumber); } } # create biblio, unless we already have it ( either match or isbn ) diff --git a/misc/migration_tools/remove_unused_authorities.pl b/misc/migration_tools/remove_unused_authorities.pl index f4e0ecbf2d..b6a81eed37 100755 --- a/misc/migration_tools/remove_unused_authorities.pl +++ b/misc/migration_tools/remove_unused_authorities.pl @@ -57,7 +57,6 @@ if ( $errZebraConnection == 10000 ) { my $dbh=C4::Context->dbh; my $thresholdmin=0; my $thresholdmax=0; -my @results; # prepare the request to retrieve all authorities of the requested types my $rqsql = "SELECT * from auth_header where 1"; $rqsql .= " AND authtypecode IN (".join(",",map{$dbh->quote($_)}@authtypes).")" if @authtypes; diff --git a/misc/perlmodule_rm.pl b/misc/perlmodule_rm.pl index 4dc3b64ff6..f5735ac4d2 100755 --- a/misc/perlmodule_rm.pl +++ b/misc/perlmodule_rm.pl @@ -2,7 +2,7 @@ # Remove a perl module -use warnings; +use Modern::Perl; use ExtUtils::Packlist; use ExtUtils::Installed; diff --git a/misc/translator/LangInstaller.pm b/misc/translator/LangInstaller.pm index cd947fc3b3..b3f5bc7285 100644 --- a/misc/translator/LangInstaller.pm +++ b/misc/translator/LangInstaller.pm @@ -552,7 +552,7 @@ sub get_all_langs { opendir( my $dh, $self->{path_po} ); my @files = grep { $_ =~ /-pref.po$/ } readdir $dh; - @files = map { $_ =~ s/-pref.po$//; $_ } @files; + @files = map { my $f = $_; $f =~ s/-pref.po$//; $f } @files; } diff --git a/misc/translator/TmplTokenizer.pm b/misc/translator/TmplTokenizer.pm index 98ec61a866..0c2f3d7a71 100644 --- a/misc/translator/TmplTokenizer.pm +++ b/misc/translator/TmplTokenizer.pm @@ -139,7 +139,7 @@ BEGIN { sub parenleft () { '(' } sub parenright () { ')' } -sub _split_js ($) { +sub _split_js { my ($s0) = @_; my @it = (); while (length $s0) { @@ -191,7 +191,7 @@ sub STATE_STRING_LITERAL () { 3 } # XXX This is a crazy hack. I don't want to write an ECMAScript parser. # XXX A scanner is one thing; a parser another thing. -sub _identify_js_translatables (@) { +sub _identify_js_translatables { my @input = @_; my @output = (); # We mark a JavaScript translatable string as in C, i.e., _("literal") @@ -228,7 +228,7 @@ sub _identify_js_translatables (@) { ############################################################################### -sub string_canon ($) { +sub string_canon { my $s = shift; # Fold all whitespace into single blanks $s =~ s/\s+/ /g; @@ -237,7 +237,7 @@ sub string_canon ($) { } # safer version used internally, preserves new lines -sub string_canon_safe ($) { +sub string_canon_safe { my $s = shift; # fold tabs and spaces into single spaces $s =~ s/[\ \t]+/ /gs; @@ -253,7 +253,7 @@ sub _quote_cformat{ sub _formalize_string_cformat{ my $s = shift; - return _quote_cformat( string_canon_safe $s ); + return _quote_cformat( string_canon_safe($s) ); } sub _formalize{ @@ -315,7 +315,7 @@ sub next_token { return $self->_parametrize_internal(@parts); } else { - return undef; + return; } } # if cformat mode is off, dont bother parametrizing, just return them as they come @@ -338,7 +338,7 @@ sub next_token { push @tail, $3; $s0 = $2; } - push @head, _split_js $s0; + push @head, _split_js($s0); $next->set_js_data(_identify_js_translatables(@head, @tail) ); return $next unless @parts; $self->{_parser}->unshift_token($next); @@ -360,7 +360,7 @@ sub next_token { # function taken from old version # used by tmpl_process3 -sub parametrize ($$$$) { +sub parametrize { my($fmt_0, $cformat_p, $t, $f) = @_; my $it = ''; if ($cformat_p) { @@ -380,13 +380,13 @@ sub parametrize ($$$$) { ; } elsif (defined $params[$i - 1]) { my $param = $params[$i - 1]; - warn_normal "$fmt_0: $&: Expected a TMPL_VAR, but found a " - . $param->type->to_string . "\n", undef + warn_normal("$fmt_0: $&: Expected a TMPL_VAR, but found a " + . $param->type->to_string . "\n", undef) if $param->type != C4::TmplTokenType::DIRECTIVE; - warn_normal "$fmt_0: $&: Unsupported " - . "field width or precision\n", undef + warn_normal("$fmt_0: $&: Unsupported " + . "field width or precision\n", undef) if defined $width || defined $prec; - warn_normal "$fmt_0: $&: Parameter $i not known", undef + warn_normal("$fmt_0: $&: Parameter $i not known", undef) unless defined $param; $it .= defined $f? &$f( $param ): $param->string; } @@ -397,27 +397,27 @@ sub parametrize ($$$$) { my $param = $params[$i - 1]; if (!defined $param) { - warn_normal "$fmt_0: $&: Parameter $i not known", undef; + warn_normal("$fmt_0: $&: Parameter $i not known", undef); } else { if ($param->type == C4::TmplTokenType::TAG && $param->string =~ /^attributes? lc($param->attributes->{'type'}->[1]): undef; if ($conv eq 'S') { - warn_normal "$fmt_0: $&: Expected type=text, " - . "but found type=$type", undef + warn_normal("$fmt_0: $&: Expected type=text, " + . "but found type=$type", undef) unless $type eq 'text'; } elsif ($conv eq 'p') { - warn_normal "$fmt_0: $&: Expected type=radio, " - . "but found type=$type", undef + warn_normal("$fmt_0: $&: Expected type=radio, " + . "but found type=$type", undef) unless $type eq 'radio'; } } else { - warn_normal "$&: Expected an INPUT, but found a " - . $param->type->to_string . "\n", undef + warn_normal("$&: Expected an INPUT, but found a " + . $param->type->to_string . "\n", undef) } - warn_normal "$fmt_0: $&: Unsupported " - . "field width or precision\n", undef + warn_normal("$fmt_0: $&: Unsupported " + . "field width or precision\n", undef) if defined $width || defined $prec; $it .= defined $f? &$f( $param ): $param->string; } @@ -440,7 +440,7 @@ sub parametrize ($$$$) { my $i = $1; $fmt = $'; my $anchor = $anchors[$i - 1]; - warn_normal "$&: Anchor $1 not found for msgid \"$fmt_0\"", undef #FIXME + warn_normal("$&: Anchor $1 not found for msgid \"$fmt_0\"", undef) #FIXME unless defined $anchor; $it .= $anchor->string; } else { @@ -453,12 +453,12 @@ sub parametrize ($$$$) { # Other simple functions (These are not methods) -sub blank_p ($) { +sub blank_p { my($s) = @_; return $s =~ /^(?:\s|\ $re_end_entity|$re_tmpl_var|$re_xsl)*$/osi; } -sub trim ($) { +sub trim { my($s0) = @_; my $l0 = length $s0; my $s = $s0; @@ -467,7 +467,7 @@ sub trim ($) { return wantarray? (substr($s0, 0, $l1), $s, substr($s0, $l0 - $l2)): $s; } -sub quote_po ($) { +sub quote_po { my($s) = @_; # Locale::PO->quote is buggy, it doesn't quote newlines :-/ $s =~ s/([\\"])/\\$1/gs; @@ -476,7 +476,7 @@ sub quote_po ($) { return "\"$s\""; } -sub charset_canon ($) { +sub charset_canon { my($charset) = @_; $charset = uc($charset); $charset = "$1-$2" if $charset =~ /^(ISO|UTF)(\d.*)/i; @@ -509,7 +509,7 @@ use vars qw( @latin1_utf8 ); "\303\270", "\303\271", "\303\272", "\303\273", "\303\274", "\303\275", "\303\276", "\303\277" ); -sub charset_convert ($$$) { +sub charset_convert { my($s, $charset_in, $charset_out) = @_; if ($s !~ /[\200-\377]/s) { # FIXME: don't worry about iso2022 for now ; diff --git a/misc/translator/VerboseWarnings.pm b/misc/translator/VerboseWarnings.pm index 8fac8ba680..1b063548a1 100644 --- a/misc/translator/VerboseWarnings.pm +++ b/misc/translator/VerboseWarnings.pm @@ -41,32 +41,32 @@ verbose warnings. use vars qw( $appName $input $input_abbr $pedantic_p $pedantic_tag $quiet); use vars qw( $warned $erred ); -sub set_application_name ($) { +sub set_application_name { my($s) = @_; $appName = $& if !defined $appName && $s =~ /[^\/]+$/; } -sub application_name () { +sub application_name { return $appName; } -sub set_input_file_name ($) { +sub set_input_file_name { my($s) = @_; $input = $s; $input_abbr = $& if defined $s && $s =~ /[^\/]+$/; } -sub set_pedantic_mode ($) { +sub set_pedantic_mode { my($p) = @_; $pedantic_p = $p; $pedantic_tag = $pedantic_p? '': ' (negligible)'; } -sub pedantic_p () { +sub pedantic_p { return $pedantic_p; } -sub construct_warn_prefix ($$) { +sub construct_warn_prefix { my($prefix, $lc) = @_; die "construct_warn_prefix called before set_application_name" unless defined $appName; @@ -81,20 +81,20 @@ sub construct_warn_prefix ($$) { return "$appName: $prefix: " . (defined $lc? "$input_abbr: line $lc: ": defined $input_abbr? "$input_abbr: ": ''); } -sub warn_additional ($$) { +sub warn_additional { my($msg, $lc) = @_; my $prefix = construct_warn_prefix('Warning', $lc); $msg .= "\n" unless $msg =~ /\n$/s; warn "$prefix$msg"; } -sub warn_normal ($$) { +sub warn_normal { my($msg, $lc) = @_; $warned += 1; warn_additional($msg, $lc); } -sub warn_pedantic ($$$) { +sub warn_pedantic { my($msg, $lc, $flag) = @_; my $prefix = construct_warn_prefix("Warning$pedantic_tag", $lc); $msg .= "\n" unless $msg =~ /\n$/s; @@ -107,20 +107,20 @@ sub warn_pedantic ($$$) { $warned += 1; } -sub error_additional ($$) { +sub error_additional { my($msg, $lc) = @_; my $prefix = construct_warn_prefix('ERROR', $lc); $msg .= "\n" unless $msg =~ /\n$/s; warn "$prefix$msg"; } -sub error_normal ($$) { +sub error_normal { my($msg, $lc) = @_; $erred += 1; error_additional($msg, $lc); } -sub warned () { +sub warned { return $warned; # number of times warned } diff --git a/misc/translator/text-extract.pl b/misc/translator/text-extract.pl index 4e2fbdce77..ab420620be 100755 --- a/misc/translator/text-extract.pl +++ b/misc/translator/text-extract.pl @@ -1,6 +1,5 @@ #!/usr/bin/perl -#use strict; -#use warnings; FIXME - Bug 2505 +use Modern::Perl; use HTML::Tree; use Getopt::Std; getopt("f:"); diff --git a/misc/translator/text-extract2.pl b/misc/translator/text-extract2.pl index cfcd027651..c47f555f50 100755 --- a/misc/translator/text-extract2.pl +++ b/misc/translator/text-extract2.pl @@ -27,16 +27,16 @@ use vars qw( $allow_cformat_p ); # FOR TESTING PURPOSES ONLY!! ############################################################################### -sub underline ($) { # for testing only +sub underline { # for testing only my($s) = @_; join('', map {/[\0-\37]/? $_: "$_\b$_"} split(//, $s)); } -sub debug_dump ($) { # for testing only +sub debug_dump { # for testing only my($h) = @_; print "re_tag_compat is /", TmplTokenizer::re_tag(1), "/\n"; for (;;) { - my $s = TmplTokenizer::next_token $h; + my $s = TmplTokenizer::next_token($h); last unless defined $s; printf "%s\n", ('-' x 79); my($kind, $t, $attr) = ($s->type, $s->string, $s->attributes); @@ -46,25 +46,25 @@ sub debug_dump ($) { # for testing only printf "Attributes:\n"; for my $a (keys %$attr) { my($key, $val, $val_orig, $order) = @{$attr->{$a}}; - printf "%s = %dH%s -- %s\n", $a, length $val, underline $val, + printf "%s = %dH%s -- %s\n", $a, length $val, underline($val), $val_orig; } } if ($kind == TmplTokenType::TEXT_PARAMETRIZED()) { printf "Form (c-format string):\n"; - printf "%dH%s\n", length $s->form, underline $s->form; + printf "%dH%s\n", length $s->form, underline($s->form); printf "Parameters:\n"; my $i = 1; for my $a ($s->parameters) { my $t = $a->string; - printf "%%%d\$s = %dH%s\n", $i, length $t, underline $t; + printf "%%%d\$s = %dH%s\n", $i, length $t, underline($t); $i += 1; } } if ($s->has_js_data) { printf "JavaScript translatable strings:\n"; for my $t (@{$s->js_data}) { - printf "%dH%s\n", length $t->[3], underline $t->[3] if $t->[0]; # FIXME + printf "%dH%s\n", length $t->[3], underline($t->[3]) if $t->[0]; # FIXME } } } @@ -72,26 +72,26 @@ sub debug_dump ($) { # for testing only ############################################################################### -sub text_extract ($) { +sub text_extract { my($h) = @_; my %text = (); for (;;) { - my $s = TmplTokenizer::next_token $h; + my $s = TmplTokenizer::next_token($h); last unless defined $s; my($kind, $t, $attr) = ($s->type, $s->string, $s->attributes); if ($kind == TmplTokenType::TEXT()) { - $t = TmplTokenizer::trim $t; + $t = TmplTokenizer::trim($t); $text{$t} = 1 if $t =~ /\S/s; } elsif ($kind == TmplTokenType::TAG() && %$attr) { # value [tag=input], meta - my $tag = lc($1) if $t =~ /^<(\S+)/s; + my $tag = ($t =~ /^<(\S+)/s) ? lc($1) : undef; for my $a ('alt', 'content', 'title', 'value') { if ($attr->{$a}) { next if $a eq 'content' && $tag ne 'meta'; next if $a eq 'value' && ($tag ne 'input' || (ref $attr->{'type'} && $attr->{'type'}->[1] =~ /^(?:hidden|radio)$/)); # FIXME my($key, $val, $val_orig, $order) = @{$attr->{$a}}; #FIXME - $val = TmplTokenizer::trim $val; + $val = TmplTokenizer::trim($val); $text{$val} = 1 if $val =~ /\S/s; } } @@ -111,7 +111,7 @@ sub text_extract ($) { ############################################################################### -sub usage ($) { +sub usage { my($exitcode) = @_; my $h = $exitcode? *STDERR: *STDOUT; print $h < \$debug_dump_only_p, 'pedantic-warnings' => sub { $pedantic_p = 1 }, 'help' => sub { usage(0) }, -) || usage_error; +) || usage_error(); -VerboseWarnings::set_application_name $0; -VerboseWarnings::set_input_file_name $input; -VerboseWarnings::set_pedantic_mode $pedantic_p; +VerboseWarnings::set_application_name($0); +VerboseWarnings::set_input_file_name($input); +VerboseWarnings::set_pedantic_mode($pedantic_p); usage_error('Missing mandatory option -f') unless defined $input; diff --git a/misc/translator/tmpl_process3.pl b/misc/translator/tmpl_process3.pl index 4ded16fb7c..59ffbe2931 100755 --- a/misc/translator/tmpl_process3.pl +++ b/misc/translator/tmpl_process3.pl @@ -32,7 +32,7 @@ use vars qw( $charset_in $charset_out ); ############################################################################### -sub find_translation ($) { +sub find_translation { my($s) = @_; my $key = $s; if ($s =~ /\S/s) { @@ -53,12 +53,12 @@ sub find_translation ($) { } } -sub text_replace_tag ($$) { +sub text_replace_tag { my($t, $attr) = @_; my $it; # value [tag=input], meta - my $tag = lc($1) if $t =~ /^<(\S+)/s; + my $tag = ($t =~ /^<(\S+)/s) ? lc($1) : undef; my $translated_p = 0; for my $a ('alt', 'content', 'title', 'value', 'label', 'placeholder') { if ($attr->{$a}) { @@ -97,10 +97,10 @@ sub text_replace_tag ($$) { return $it; } -sub text_replace (**) { +sub text_replace { my($h, $output) = @_; for (;;) { - my $s = TmplTokenizer::next_token $h; + my $s = TmplTokenizer::next_token($h); last unless defined $s; my($kind, $t, $attr) = ($s->type, $s->string, $s->attributes); if ($kind eq C4::TmplTokenType::TEXT) { @@ -118,7 +118,7 @@ sub text_replace (**) { for my $t (@{$s->js_data}) { # FIXME for this whole block if ($t->[0]) { - printf $output "%s%s%s", $t->[2], find_translation $t->[3], + printf $output "%s%s%s", $t->[2], find_translation($t->[3]), $t->[2]; } else { print $output $t->[1]; @@ -158,14 +158,14 @@ sub listfiles { } } } else { - warn_normal "$dir: $!", undef; + warn_normal("$dir: $!", undef); } return @it; } ############################################################################### -sub mkdir_recursive ($) { +sub mkdir_recursive { my($dir) = @_; local($`, $&, $', $1); $dir = $` if $dir ne /^\/+$/ && $dir =~ /\/+$/; @@ -174,13 +174,13 @@ sub mkdir_recursive ($) { if (!-d $dir) { print STDERR "Making directory $dir...\n" unless $quiet; # creates with rwxrwxr-x permissions - mkdir($dir, 0775) || warn_normal "$dir: $!", undef; + mkdir($dir, 0775) || warn_normal("$dir: $!", undef); } } ############################################################################### -sub usage ($) { +sub usage { my($exitcode) = @_; my $h = $exitcode? *STDERR: *STDOUT; print $h < \$quiet, 'pedantic-warnings|pedantic' => sub { $pedantic_p = 1 }, 'help' => \&usage, -) || usage_error; +) || usage_error(); -VerboseWarnings::set_application_name $0; -VerboseWarnings::set_pedantic_mode $pedantic_p; +VerboseWarnings::set_application_name($0); +VerboseWarnings::set_pedantic_mode($pedantic_p); # keep the buggy Locale::PO quiet if it says stupid things $SIG{__WARN__} = sub { @@ -287,7 +287,7 @@ $href = Locale::PO->load_file_ashash($str_file); # guess the charsets. HTML::Templates defaults to iso-8859-1 if (defined $href) { die "$str_file: PO file is corrupted, or not a PO file\n" unless defined $href->{'""'}; - $charset_out = TmplTokenizer::charset_canon $2 if $href->{'""'}->msgstr =~ /\bcharset=(["']?)([^;\s"'\\]+)\1/; + $charset_out = TmplTokenizer::charset_canon($2) if $href->{'""'}->msgstr =~ /\bcharset=(["']?)([^;\s"'\\]+)\1/; $charset_in = $charset_out; # for my $msgid (keys %$href) { # if ($msgid =~ /\bcharset=(["']?)([^;\s"'\\]+)\1/) { @@ -306,22 +306,22 @@ if (defined $href) { next if $id_count == $str_count || $msg->{msgstr} eq '""' || grep { /fuzzy/ } @{$msg->{_flags}}; - warn_normal + warn_normal( "unconsistent %s count: ($id_count/$str_count):\n" . " line: " . $msg->{loaded_line_number} . "\n" . " msgid: " . $msg->{msgid} . "\n" . - " msgstr: " . $msg->{msgstr} . "\n", undef; + " msgstr: " . $msg->{msgstr} . "\n", undef); } } # set our charset in to UTF-8 if (!defined $charset_in) { - $charset_in = TmplTokenizer::charset_canon 'UTF-8'; + $charset_in = TmplTokenizer::charset_canon('UTF-8'); warn "Warning: Can't determine original templates' charset, defaulting to $charset_in\n"; } # set our charset out to UTF-8 if (!defined $charset_out) { - $charset_out = TmplTokenizer::charset_canon 'UTF-8'; + $charset_out = TmplTokenizer::charset_canon('UTF-8'); warn "Warning: Charset Out defaulting to $charset_out\n"; } my $xgettext = './xgettext.pl'; # actual text extractor script @@ -356,23 +356,22 @@ if ($action eq 'create') { # FIXME: msgmerge(1) is a Unix dependency # FIXME: need to check the return value unless (-f $str_file) { - local(*INPUT, *OUTPUT); - open(INPUT, "<$tmpfile2"); - open(OUTPUT, ">$str_file"); - while () { - print OUTPUT; + open(my $infh, '<', $tmpfile2); + open(my $outfh, '>', $str_file); + while (<$infh>) { + print $outfh; last if /^\n/s; } - close INPUT; - close OUTPUT; + close $infh; + close $outfh; } $st = system("msgmerge ".($quiet?'-q':'')." -s $str_file $tmpfile2 -o - | msgattrib --no-obsolete -o $str_file"); } else { - error_normal "Text extraction failed: $xgettext: $!\n", undef; - error_additional "Will not run msgmerge\n", undef; + error_normal("Text extraction failed: $xgettext: $!\n", undef); + error_additional("Will not run msgmerge\n", undef); } - unlink $tmpfile1 || warn_normal "$tmpfile1: unlink failed: $!\n", undef; - unlink $tmpfile2 || warn_normal "$tmpfile2: unlink failed: $!\n", undef; + unlink $tmpfile1 || warn_normal("$tmpfile1: unlink failed: $!\n", undef); + unlink $tmpfile2 || warn_normal("$tmpfile2: unlink failed: $!\n", undef); } elsif ($action eq 'update') { my($tmph1, $tmpfile1) = tmpnam(); @@ -401,11 +400,11 @@ if ($action eq 'create') { $st = system("msgmerge ".($quiet?'-q':'')." -s $str_file $tmpfile2 -o - | msgattrib --no-obsolete -o $str_file"); } } else { - error_normal "Text extraction failed: $xgettext: $!\n", undef; - error_additional "Will not run msgmerge\n", undef; + error_normal("Text extraction failed: $xgettext: $!\n", undef); + error_additional("Will not run msgmerge\n", undef); } - unlink $tmpfile1 || warn_normal "$tmpfile1: unlink failed: $!\n", undef; - unlink $tmpfile2 || warn_normal "$tmpfile2: unlink failed: $!\n", undef; + unlink $tmpfile1 || warn_normal("$tmpfile1: unlink failed: $!\n", undef); + unlink $tmpfile2 || warn_normal("$tmpfile2: unlink failed: $!\n", undef); } elsif ($action eq 'install') { if(!defined($out_dir)) { @@ -428,8 +427,8 @@ if ($action eq 'create') { -d $out_dir || die "$out_dir: The directory does not exist\n"; # Try to open the file, because Locale::PO doesn't check :-/ - open(INPUT, "<$str_file") || die "$str_file: $!\n"; - close INPUT; + open(my $fh, '<', $str_file) || die "$str_file: $!\n"; + close $fh; # creates the new tmpl file using the new translation for my $input (@in_files) { @@ -437,17 +436,17 @@ if ($action eq 'create') { unless substr($input, 0, length($in_dir) + 1) eq "$in_dir/"; my $target = $out_dir . substr($input, length($in_dir)); - my $targetdir = $` if $target =~ /[^\/]+$/s; + my $targetdir = ($target =~ /[^\/]+$/s) ? $` : undef; if (!defined $type || $input =~ /\.(?:$type)$/) { my $h = TmplTokenizer->new( $input ); $h->set_allow_cformat( 1 ); - VerboseWarnings::set_input_file_name $input; + VerboseWarnings::set_input_file_name($input); mkdir_recursive($targetdir) unless -d $targetdir; print STDERR "Creating $target...\n" unless $quiet; - open( OUTPUT, ">$target" ) || die "$target: $!\n"; - text_replace( $h, *OUTPUT ); - close OUTPUT; + open( my $fh, '>', $target ) || die "$target: $!\n"; + text_replace( $h, $fh ); + close $fh; } else { # just copying the file mkdir_recursive($targetdir) unless -d $targetdir; diff --git a/misc/translator/xgettext.pl b/misc/translator/xgettext.pl index 8d555478ad..9b6d21d08e 100755 --- a/misc/translator/xgettext.pl +++ b/misc/translator/xgettext.pl @@ -98,7 +98,7 @@ sub string_list { sub text_extract { my($h) = @_; for (;;) { - my $s = TmplTokenizer::next_token $h; + my $s = TmplTokenizer::next_token($h); last unless defined $s; my($kind, $t, $attr) = ($s->type, $s->string, $s->attributes); if ($kind eq C4::TmplTokenType::TEXT) { @@ -120,7 +120,7 @@ sub text_extract { next if $a eq 'value' && ($tag ne 'input' || (ref $attr->{'type'} && $attr->{'type'}->[1] =~ /^(?:hidden|radio|checkbox)$/)); # FIXME my($key, $val, $val_orig, $order) = @{$attr->{$a}}; #FIXME - $val = TmplTokenizer::trim $val; + $val = TmplTokenizer::trim($val); remember( $s, $val ) if $val =~ /\S/s; } } @@ -146,7 +146,7 @@ sub generate_strings_list { sub generate_po_file { # We don't emit the Plural-Forms header; it's meaningless for us my $pot_charset = (defined $charset_out? $charset_out: 'CHARSET'); - $pot_charset = TmplTokenizer::charset_canon $pot_charset; + $pot_charset = TmplTokenizer::charset_canon($pot_charset); # Time stamps aren't exactly right semantically. I don't know how to fix it. my $time = POSIX::strftime('%Y-%m-%d %H:%M%z', localtime(time)); my $time_pot = $time; @@ -235,9 +235,11 @@ EOF $cformat_p = 1 if $token->type == C4::TmplTokenType::TEXT_PARAMETRIZED; } printf $OUTPUT "#, c-format\n" if $cformat_p; - printf $OUTPUT "msgid %s\n", TmplTokenizer::quote_po - TmplTokenizer::string_canon - TmplTokenizer::charset_convert $t, $charset_in, $charset_out; + printf $OUTPUT "msgid %s\n", TmplTokenizer::quote_po( + TmplTokenizer::string_canon( + TmplTokenizer::charset_convert($t, $charset_in, $charset_out) + ) + ); printf $OUTPUT "msgstr %s\n\n", (defined $translation{$t}? TmplTokenizer::quote_po( $translation{$t} ): "\"\""); } @@ -247,7 +249,7 @@ EOF sub convert_translation_file { open(my $INPUT, '<', $convert_from) || die "$convert_from: $!\n"; - VerboseWarnings::set_input_file_name $convert_from; + VerboseWarnings::set_input_file_name($convert_from); while (<$INPUT>) { chomp; my($msgid, $msgstr) = split(/\t/); @@ -264,13 +266,13 @@ sub convert_translation_file { $translation{$msgid} = $msgstr unless $msgstr eq '*****'; if ($msgid =~ /\bcharset=(["']?)([^;\s"']+)\1/s) { - my $candidate = TmplTokenizer::charset_canon $2; + my $candidate = TmplTokenizer::charset_canon($2); die "Conflicting charsets in msgid: $candidate vs $charset_in\n" if defined $charset_in && $charset_in ne $candidate; $charset_in = $candidate; } if ($msgstr =~ /\bcharset=(["']?)([^;\s"']+)\1/s) { - my $candidate = TmplTokenizer::charset_canon $2; + my $candidate = TmplTokenizer::charset_canon($2); die "Conflicting charsets in msgid: $candidate vs $charset_out\n" if defined $charset_out && $charset_out ne $candidate; $charset_out = $candidate; @@ -278,7 +280,7 @@ sub convert_translation_file { } # The following assumption is correct; that's what HTML::Template assumes if (!defined $charset_in) { - $charset_in = $charset_out = TmplTokenizer::charset_canon 'utf-8'; + $charset_in = $charset_out = TmplTokenizer::charset_canon('utf-8'); warn "Warning: Can't determine original templates' charset, defaulting to $charset_in\n"; } } @@ -346,8 +348,8 @@ GetOptions( 'help' => sub { usage(0) }, ) || usage_error; -VerboseWarnings::set_application_name $0; -VerboseWarnings::set_pedantic_mode $pedantic_p; +VerboseWarnings::set_application_name($0); +VerboseWarnings::set_pedantic_mode($pedantic_p); usage_error('Missing mandatory option -f') unless defined $files_from || defined $convert_from; @@ -372,7 +374,7 @@ if (defined $files_from) { my $input = /^\//? $_: "$directory/$_"; my $h = TmplTokenizer->new( $input ); $h->set_allow_cformat( 1 ); - VerboseWarnings::set_input_file_name $input; + VerboseWarnings::set_input_file_name($input); print STDERR "$0: Processing file \"$input\"\n" if $verbose_p; text_extract( $h ); } diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl index d4380363fb..77fbc04264 100755 --- a/opac/opac-MARCdetail.pl +++ b/opac/opac-MARCdetail.pl @@ -152,7 +152,6 @@ if (C4::Context->preference("RequestOnOpac")) { # fill arrays my @loop_data = (); -my $tag; # loop through each tab 0 through 9 for ( my $tabloop = 0 ; $tabloop <= 9 ; $tabloop++ ) { diff --git a/opac/opac-alert-subscribe.pl b/opac/opac-alert-subscribe.pl index 63de7d34d9..c9ccae8882 100755 --- a/opac/opac-alert-subscribe.pl +++ b/opac/opac-alert-subscribe.pl @@ -32,7 +32,6 @@ my $query = new CGI; my $op = $query->param('op') || ''; my $dbh = C4::Context->dbh; -my $sth; my ( $template, $loggedinuser, $cookie ); my $subscriptionid = $query->param('subscriptionid'); my $referer = $query->param('referer') || 'detail'; diff --git a/opac/opac-authorities-home.pl b/opac/opac-authorities-home.pl index 3ea2719412..d460682444 100755 --- a/opac/opac-authorities-home.pl +++ b/opac/opac-authorities-home.pl @@ -56,7 +56,6 @@ if ( $op eq "do_search" ) { my @value = $query->multi_param('value'); $value[0] ||= q||; - my @tags; my $builder = Koha::SearchEngine::QueryBuilder->new( { index => $Koha::SearchEngine::AUTHORITIES_INDEX } ); my $searcher = Koha::SearchEngine::Search->new( diff --git a/opac/opac-authoritiesdetail.pl b/opac/opac-authoritiesdetail.pl index 0f389a010e..941a462d34 100755 --- a/opac/opac-authoritiesdetail.pl +++ b/opac/opac-authoritiesdetail.pl @@ -109,7 +109,6 @@ if ($show_marc) { # fill arrays my @loop_data = (); - my $tag; # loop through each tag my @fields = $record->fields(); diff --git a/opac/opac-basket.pl b/opac/opac-basket.pl index 87eea86e82..ae7a529b8d 100755 --- a/opac/opac-basket.pl +++ b/opac/opac-basket.pl @@ -89,7 +89,6 @@ foreach my $biblionumber ( @bibs ) { { map { $_->{authorised_value} => $_->{opac_description} } Koha::AuthorisedValues->get_descriptions_by_koha_field( { frameworkcode => $dat->{frameworkcode}, kohafield => 'items.location' } ) }; # COinS format FIXME: for books Only - my $coins_format; my $fmt = substr $record->leader(), 6,2; my $fmts; $fmts->{'am'} = 'book'; diff --git a/opac/opac-search.pl b/opac/opac-search.pl index ce2cefc09c..a229333473 100755 --- a/opac/opac-search.pl +++ b/opac/opac-search.pl @@ -531,8 +531,6 @@ my $expanded_facet = $params->{'expand'}; # Define some global variables my ($error,$query,$simple_query,$query_cgi,$query_desc,$limit,$limit_cgi,$limit_desc,$query_type); -my @results; - my $suppress = 0; if (C4::Context->preference('OpacSuppression')) { # OPAC suppression by IP address @@ -583,9 +581,7 @@ $template->param ( OPACResultsSidebar => C4::Context->preference('OPACResultsSid ## II. DO THE SEARCH AND GET THE RESULTS my $total = 0; # the total results for the whole set my $facets; # this object stores the faceted results that display on the left-hand of the results page -my @results_array; my $results_hashref; -my @coins; if ($tag) { $query_cgi = "tag=" .$tag . "&" . $query_cgi; @@ -938,7 +934,6 @@ for (my $i=0;$i<@servers;$i++) { # FIXME: can add support for other targets as needed here $template->param( outer_sup_results_loop => \@sup_results_array); } #/end of the for loop -#$template->param(FEDERATED_RESULTS => \@results_array); for my $facet ( @$facets ) { for my $entry ( @{ $facet->{facets} } ) { diff --git a/opac/opac-serial-issues.pl b/opac/opac-serial-issues.pl index b94935feee..4f30940521 100755 --- a/opac/opac-serial-issues.pl +++ b/opac/opac-serial-issues.pl @@ -34,8 +34,6 @@ my $dbh = C4::Context->dbh; my $selectview = $query->param('selectview'); $selectview = C4::Context->preference("SubscriptionHistory") unless $selectview; -my $sth; - # my $id; my ( $template, $loggedinuser, $cookie ); my $biblionumber = $query->param('biblionumber'); diff --git a/opac/opac-showreviews.pl b/opac/opac-showreviews.pl index fc6dc6cac1..c7cd4b35b2 100755 --- a/opac/opac-showreviews.pl +++ b/opac/opac-showreviews.pl @@ -85,7 +85,6 @@ my $reviews = Koha::Reviews->search( my $marcflavour = C4::Context->preference("marcflavour"); my $hits = Koha::Reviews->search({ approved => 1 })->count; my $i = 0; -my $latest_comment_date; for my $result (@$reviews){ my $biblionumber = $result->{biblionumber}; my $biblio = Koha::Biblios->find( $biblionumber ); diff --git a/patroncards/create-pdf.pl b/patroncards/create-pdf.pl index 154377ce0e..c38ce43306 100755 --- a/patroncards/create-pdf.pl +++ b/patroncards/create-pdf.pl @@ -44,13 +44,13 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user({ flagsrequired => { tools => 'label_creator' }, debug => 1, }); -my $batch_id = $cgi->param('batch_id') if $cgi->param('batch_id'); +my $batch_id = $cgi->param('batch_id') || undef; my $template_id = $cgi->param('template_id') || undef; my $layout_id = $cgi->param('layout_id') || undef; my $layout_back_id = $cgi->param('layout_back_id') || undef; my $start_card = $cgi->param('start_card') || 1; -my @label_ids = $cgi->multi_param('label_id') if $cgi->param('label_id'); -my @borrower_numbers = $cgi->multi_param('borrower_number') if $cgi->param('borrower_number'); +my @label_ids = $cgi->multi_param('label_id'); +my @borrower_numbers = $cgi->multi_param('borrower_number'); my $patronlist_id = $cgi->param('patronlist_id'); my $items = undef; # items = cards @@ -70,7 +70,7 @@ $pdf = C4::Creators::PDF->new(InitVars => 0); my $batch = C4::Patroncards::Batch->retrieve(batch_id => $batch_id); my $pc_template = C4::Patroncards::Template->retrieve(template_id => $template_id, profile_id => 1); my $layout = C4::Patroncards::Layout->retrieve(layout_id => $layout_id); -my $layout_back = C4::Patroncards::Layout->retrieve(layout_id => $layout_back_id) if ( $layout_back_id ); +my $layout_back = $layout_back_id ? C4::Patroncards::Layout->retrieve(layout_id => $layout_back_id) : undef; $| = 1; @@ -111,7 +111,7 @@ else { } my $layout_xml = XMLin($layout->get_attr('layout_xml'), ForceArray => 1); -my $layout_back_xml = XMLin($layout_back->get_attr('layout_xml'), ForceArray => 1) if ( defined $layout_back ); +my $layout_back_xml = defined $layout_back ? XMLin($layout_back->get_attr('layout_xml'), ForceArray => 1) : undef; if ($layout_xml->{'page_side'} eq 'B') { # rearrange items on backside of page to swap columns my $even = 1; diff --git a/patroncards/image-manage.pl b/patroncards/image-manage.pl index 2c08123427..8caa4b6b33 100755 --- a/patroncards/image-manage.pl +++ b/patroncards/image-manage.pl @@ -28,7 +28,7 @@ my $file_name = $cgi->param('uploadfile') || ''; my $image_name = $cgi->param('image_name') || $file_name; my $upload_file = $cgi->upload('uploadfile') || ''; my $op = $cgi->param('op') || 'none'; -my @image_ids = $cgi->multi_param('image_id') if $cgi->param('image_id'); +my @image_ids = $cgi->multi_param('image_id'); my $source_file = "$file_name"; # otherwise we end up with what amounts to a pointer to a filehandle rather than a user-friendly filename diff --git a/patroncards/print.pl b/patroncards/print.pl index 8992038fec..4ade2c1995 100755 --- a/patroncards/print.pl +++ b/patroncards/print.pl @@ -40,14 +40,14 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( ); my $op = $cgi->param('op') || 'none'; -my @label_ids = $cgi->multi_param('label_id') if $cgi->param('label_id'); # this will handle individual card printing; we use label_id to maintain consistency with the column names in the creator_batches table -my @batch_ids = $cgi->multi_param('batch_id') if $cgi->param('batch_id'); +my @label_ids = $cgi->multi_param('label_id'); # this will handle individual card printing; we use label_id to maintain consistency with the column names in the creator_batches table +my @batch_ids = $cgi->multi_param('batch_id'); my $patronlist_id = $cgi->param('patronlist_id') || undef; my $layout_id = $cgi->param('layout_id') || undef; my $layout_back_id = $cgi->param('layout_back_id') || undef; my $template_id = $cgi->param('template_id') || undef; my $start_card = $cgi->param('start_card') || 1; -my @borrower_numbers = $cgi->multi_param('borrower_number') if $cgi->param('borrower_number'); +my @borrower_numbers = $cgi->multi_param('borrower_number'); my $output_format = $cgi->param('output_format') || 'pdf'; my $referer = $cgi->param('referer') || undef; @@ -123,9 +123,9 @@ elsif ($op eq 'none') { # setup select menus for selecting layout and template for this run... $referer = $ENV{'HTTP_REFERER'}; $referer =~ s/^.*?:\/\/.*?(\/.*)$/$1/m; - @batch_ids = grep{$_ = {batch_id => $_}} @batch_ids; - @label_ids = grep{$_ = {label_id => $_}} @label_ids; - @borrower_numbers = grep{$_ = {borrower_number => $_}} @borrower_numbers; + @batch_ids = map { {batch_id => $_} } @batch_ids; + @label_ids = map { {label_id => $_} } @label_ids; + @borrower_numbers = map { {borrower_number => $_} } @borrower_numbers; $templates = get_all_templates( { fields => [qw( template_id template_code ) ], filters => { creator => "Patroncards" } }); $layouts = get_all_layouts({ fields => [ qw( layout_id layout_name ) ], filters => { creator => "Patroncards" } }); $output_formats = get_output_formats(); diff --git a/plugins/plugins-upload.pl b/plugins/plugins-upload.pl index 06fcea571e..01edb61f7d 100755 --- a/plugins/plugins-upload.pl +++ b/plugins/plugins-upload.pl @@ -48,7 +48,7 @@ my $uploadfilename = $input->param('uploadfile'); my $uploadfile = $input->upload('uploadfile'); my $op = $input->param('op') || q{}; -my ( $total, $handled, @counts, $tempfile, $tfh ); +my ( $tempfile, $tfh ); my %errors; diff --git a/reports/acquisitions_stats.pl b/reports/acquisitions_stats.pl index d7dea6a85f..eb56a05b31 100755 --- a/reports/acquisitions_stats.pl +++ b/reports/acquisitions_stats.pl @@ -426,7 +426,6 @@ sub calculate { } my $i = 0; - my @totalcol; my $hilighted = -1; #Initialization of cell values..... diff --git a/reports/bor_issues_top.pl b/reports/bor_issues_top.pl index 84a46a36a2..e2f6989f71 100755 --- a/reports/bor_issues_top.pl +++ b/reports/bor_issues_top.pl @@ -41,7 +41,7 @@ plugin that shows a stats on borrowers =cut -$debug and open DEBUG, ">/tmp/bor_issues_top.debug.log"; +$debug and open my $debugfh, '>', '/tmp/bor_issues_top.debug.log'; my $input = new CGI; my $fullreportname = "reports/bor_issues_top.tt"; @@ -104,7 +104,6 @@ if ($do_it) { } my $dbh = C4::Context->dbh; -my @values; # here each element returned by map is a hashref, get it? my @mime = ( map { {type =>$_} } (split /[;:]/, 'CSV') ); # FIXME translation @@ -125,7 +124,6 @@ sub calculate { my ($limit, $column, $filters) = @_; my @loopcol; - my @loopline; my @looprow; my %globalline; my %columns; @@ -226,25 +224,25 @@ sub calculate { $strsth2 .=" GROUP BY $colfield"; $strsth2 .=" ORDER BY $colorder"; - $debug and print DEBUG "bor_issues_top (old_issues) SQL: $strsth2\n"; + $debug and print $debugfh "bor_issues_top (old_issues) SQL: $strsth2\n"; my $sth2 = $dbh->prepare($strsth2); $sth2->execute; - print DEBUG "rows: ", $sth2->rows, "\n"; + print $debugfh "rows: ", $sth2->rows, "\n"; while (my @row = $sth2->fetchrow) { $columns{($row[0] ||'NULL')}++; push @loopcol, { coltitle => $row[0] || 'NULL' }; } $strsth2 =~ s/old_issues/issues/g; - $debug and print DEBUG "bor_issues_top (issues) SQL: $strsth2\n"; + $debug and print $debugfh "bor_issues_top (issues) SQL: $strsth2\n"; $sth2 = $dbh->prepare($strsth2); $sth2->execute; - $debug and print DEBUG "rows: ", $sth2->rows, "\n"; + $debug and print $debugfh "rows: ", $sth2->rows, "\n"; while (my @row = $sth2->fetchrow) { $columns{($row[0] ||'NULL')}++; push @loopcol, { coltitle => $row[0] || 'NULL' }; } - $debug and print DEBUG "full array: ", Dumper(\%columns), "\n"; + $debug and print $debugfh "full array: ", Dumper(\%columns), "\n"; }else{ $columns{''} = 1; } @@ -281,10 +279,10 @@ sub calculate { $strcalc .= ",$colfield " if ($colfield); $strcalc .= " LIMIT $limit" if ($limit); - $debug and print DEBUG "(old_issues) SQL : $strcalc\n"; + $debug and print $debugfh "(old_issues) SQL : $strcalc\n"; my $dbcalc = $dbh->prepare($strcalc); $dbcalc->execute; - $debug and print DEBUG "rows: ", $dbcalc->rows, "\n"; + $debug and print $debugfh "rows: ", $dbcalc->rows, "\n"; my %patrons = (); # DATA STRUCTURE is going to look like this: # (2253=> {name=>"John Doe", @@ -303,10 +301,10 @@ sub calculate { use Data::Dumper; $strcalc =~ s/old_issues/issues/g; - $debug and print DEBUG "(issues) SQL : $strcalc\n"; + $debug and print $debugfh "(issues) SQL : $strcalc\n"; $dbcalc = $dbh->prepare($strcalc); $dbcalc->execute; - $debug and print DEBUG "rows: ", $dbcalc->rows, "\n"; + $debug and print $debugfh "rows: ", $dbcalc->rows, "\n"; while (my @data = $dbcalc->fetchrow) { my ($row, $rank, $id, $col) = @data; $col = "zzEMPTY" if (!defined($col)); @@ -325,7 +323,7 @@ sub calculate { $patrons{$id}->{total} += $count; } } - $debug and print DEBUG "\n\npatrons: ", Dumper(\%patrons); + $debug and print $debugfh "\n\npatrons: ", Dumper(\%patrons); my $i = 1; my @cols_in_order = sort keys %columns; # if you want to order the columns, do something here @@ -371,6 +369,6 @@ sub calculate { return [\%globalline]; # reference to a 1 element array: that element is a hashref } -$debug and close DEBUG; +$debug and close $debugfh; 1; __END__ diff --git a/reports/borrowers_out.pl b/reports/borrowers_out.pl index 762a0d4d09..31ba73aa8b 100755 --- a/reports/borrowers_out.pl +++ b/reports/borrowers_out.pl @@ -110,11 +110,7 @@ if ($do_it) { # Displaying choices } else { my $dbh = C4::Context->dbh; - my @values; - my %labels; - my %select; - my $req; - + my $CGIextChoice = ( 'CSV' ); # FIXME translation my $CGIsepChoice = GetDelimiterChoices; @@ -133,7 +129,6 @@ sub calculate { my @mainloop; my @loopfooter; my @loopcol; - my @loopline; my @looprow; my %globalline; my $grantotal =0; diff --git a/reports/catalogue_out.pl b/reports/catalogue_out.pl index 3b0fdd8f74..7713b14d1b 100755 --- a/reports/catalogue_out.pl +++ b/reports/catalogue_out.pl @@ -66,8 +66,6 @@ output_html_with_http_headers $input, $cookie, $template->output; sub calculate { my ( $limit, $column, $filters ) = @_; - my @loopline; - my @looprow; my %globalline; my %columns = (); my $dbh = C4::Context->dbh; diff --git a/reports/catalogue_stats.pl b/reports/catalogue_stats.pl index b7bd98a024..536a76b266 100755 --- a/reports/catalogue_stats.pl +++ b/reports/catalogue_stats.pl @@ -114,11 +114,7 @@ if ($do_it) { } } else { my $dbh = C4::Context->dbh; - my @values; - my %labels; my $count=0; - my $req; - my @select; my $itemtypes = Koha::ItemTypes->search_with_localization; @@ -397,7 +393,6 @@ sub calculate { } my $i = 0; - my @totalcol; my $hilighted = -1; #Initialization of cell values..... diff --git a/reports/issues_avg_stats.pl b/reports/issues_avg_stats.pl index cea969e5b0..baa4e69e1b 100755 --- a/reports/issues_avg_stats.pl +++ b/reports/issues_avg_stats.pl @@ -389,7 +389,6 @@ sub calculate { # warn "fin des titres colonnes"; my $i=0; - my @totalcol; my $hilighted=-1; #Initialization of cell values..... @@ -442,12 +441,8 @@ sub calculate { $dbcalc->execute; # warn "filling table"; my $issues_count=0; - my $previous_row; - my $previous_col; my $loanlength; - my $err; my $emptycol; - my $weightrow; while (my @data = $dbcalc->fetchrow) { my ($row, $col, $issuedate, $returndate, $weight)=@data; diff --git a/reports/issues_stats.pl b/reports/issues_stats.pl index 3c1ba1facb..9ee269fcea 100755 --- a/reports/issues_stats.pl +++ b/reports/issues_stats.pl @@ -148,9 +148,6 @@ if ($do_it) { my $dbh = C4::Context->dbh; -my @values; -my %labels; -my %select; # location list my @locations; @@ -523,7 +520,7 @@ sub calculate { or ( $colsource eq 'items' ) || @$filters[5] || @$filters[6] || @$filters[7] || @$filters[8] || @$filters[9] || @$filters[10] || @$filters[11] || @$filters[12] || @$filters[13] ); $strcalc .= "WHERE 1=1 "; - @$filters = map { defined($_) and s/\*/%/g; $_ } @$filters; + @$filters = map { my $f = $_; defined($f) and $f =~ s/\*/%/g; $f } @$filters; $strcalc .= " AND statistics.datetime >= '" . @$filters[0] . "'" if ( @$filters[0] ); $strcalc .= " AND statistics.datetime <= '" . @$filters[1] . " 23:59:59'" if ( @$filters[1] ); $strcalc .= " AND borrowers.categorycode LIKE '" . @$filters[2] . "'" if ( @$filters[2] ); diff --git a/reports/reserves_stats.pl b/reports/reserves_stats.pl index 09bfd0c729..76e2b3753a 100755 --- a/reports/reserves_stats.pl +++ b/reports/reserves_stats.pl @@ -126,9 +126,6 @@ if ($do_it) { } my $dbh = C4::Context->dbh; -my @values; -my %labels; -my %select; my $itemtypes = Koha::ItemTypes->search_with_localization; @@ -260,7 +257,6 @@ sub calculate { push @loopfilter, {crit=>'SQL =', sql=>1, filter=>$strcalc}; @sqlparams=(@sqlparams,@sqlorparams); $dbcalc->execute(@sqlparams); - my ($emptycol,$emptyrow); my $data = $dbcalc->fetchall_hashref([qw(line col)]); my %cols_hash; foreach my $row (keys %$data){ diff --git a/rewrite-config.PL b/rewrite-config.PL index 8b886847f3..b71fc0d3be 100644 --- a/rewrite-config.PL +++ b/rewrite-config.PL @@ -19,6 +19,7 @@ # # 2007/11/12 Added DB_PORT and changed other keywords to reflect multi-dbms support. -fbcit +use Modern::Perl; use Sys::Hostname; use Socket; @@ -155,7 +156,7 @@ $prefix = $ENV{'INSTALL_BASE'} || "/usr"; ); # Override configuration from the environment -foreach $key (keys %configuration) { +foreach my $key (keys %configuration) { if (defined($ENV{$key})) { $configuration{$key} = $ENV{$key}; } @@ -177,21 +178,22 @@ $file =~ s/__.*?__/exists $configuration{$&} ? $configuration{$&} : $&/seg; # to make it writable. Note that stat and chmod # (the Perl functions) should work on Win32 my $old_perm; -$old_perm = (stat $fname)[2] & 07777; -my $new_perm = $old_perm | 0200; +$old_perm = (stat $fname)[2] & oct(7777); +my $new_perm = $old_perm | oct(200); chmod $new_perm, $fname; -open(OUTPUT,">$fname") || die "Can't open $fname for write: $!"; -print OUTPUT $file; -close(OUTPUT); +open(my $output, ">", $fname) || die "Can't open $fname for write: $!"; +print $output $file; +close($output); chmod $old_perm, $fname; # Idea taken from perlfaq5 -sub read_file($) { - local(*INPUT,$/); - open(INPUT,$_[0]) || die "Can't open $_[0] for read"; - my $file = ; +sub read_file { + local $/; + open(my $fh , '<', $_[0]) || die "Can't open $_[0] for read"; + my $file = <$fh>; + close $fh; return $file; } diff --git a/svc/holds b/svc/holds index 062109d40c..050b7675f9 100755 --- a/svc/holds +++ b/svc/holds @@ -67,7 +67,6 @@ my $holds_rs = Koha::Holds->search( } ); -my $borrower; my @holds; while ( my $h = $holds_rs->next() ) { my $item = $h->item(); diff --git a/t/00-testcritic.t b/t/00-testcritic.t index 8a7f5d2e5f..4c7f44132a 100755 --- a/t/00-testcritic.t +++ b/t/00-testcritic.t @@ -1,39 +1,13 @@ #!/usr/bin/env perl # This script can be used to run perlcritic on perl files in koha -# It calls its own custom perlcriticrc # The script is purely optional requiring Test::Perl::Critic to be installed # and the environment variable TEST_QA to be set -# At present only the directories in @dirs will pass the tests in 'Gentle' mode use Modern::Perl; -use File::Spec; use Test::More; use English qw(-no_match_vars); -my @dirs = qw( - acqui - admin - authorities - basket - catalogue - cataloguing - circ - debian - errors - labels - members - offline_circ - reserve - reviews - rotating_collections - serials - sms - virtualshelves - Koha - C4/SIP -); - if ( not $ENV{TEST_QA} ) { my $msg = 'Author test. Set $ENV{TEST_QA} to a true value to run'; plan( skip_all => $msg ); @@ -46,7 +20,5 @@ if ( $EVAL_ERROR ) { plan( skip_all => $msg ); } -my $rcfile = File::Spec->catfile( 't', 'perlcriticrc' ); -Test::Perl::Critic->import( -profile => $rcfile); -all_critic_ok(@dirs); - +Test::Perl::Critic->import( -profile => '.perlcriticrc'); +all_critic_ok('.'); diff --git a/t/Languages.t b/t/Languages.t index edd2a5ad1a..14b84135bb 100644 --- a/t/Languages.t +++ b/t/Languages.t @@ -37,7 +37,7 @@ $module_context->mock( preference => sub { my ($self, $pref) = @_; if ($return_undef) { - return undef; + return; } elsif ($pref =~ /language/) { return join ',', @languages; } else { diff --git a/t/Prices.t b/t/Prices.t index 4039233f5d..f5f8beddbb 100644 --- a/t/Prices.t +++ b/t/Prices.t @@ -42,8 +42,8 @@ fixtures_ok [ my $bookseller_module = Test::MockModule->new('Koha::Acquisition::Bookseller'); -my ( $basketno_0_0, $basketno_1_1, $basketno_1_0, $basketno_0_1 ); -my ( $invoiceid_0_0, $invoiceid_1_1, $invoiceid_1_0, $invoiceid_0_1 ); +my ( $basketno_0_0, $basketno_1_1 ); +my ( $invoiceid_0_0, $invoiceid_1_1 ); my $today; for my $currency_format ( qw( US FR ) ) { diff --git a/t/SuggestionEngine.t b/t/SuggestionEngine.t index eed6fe8525..c8c981fa60 100755 --- a/t/SuggestionEngine.t +++ b/t/SuggestionEngine.t @@ -13,7 +13,7 @@ BEGIN { my $plugindir = File::Spec->rel2abs('Koha/SuggestionEngine/Plugin'); opendir(my $dh, $plugindir); -my @installed_plugins = map { ( /\.pm$/ && -f "$plugindir/$_" && s/\.pm$// ) ? "Koha::SuggestionEngine::Plugin::$_" : () } readdir($dh); +my @installed_plugins = map { my $p = $_; ( $p =~ /\.pm$/ && -f "$plugindir/$p" && $p =~ s/\.pm$// ) ? "Koha::SuggestionEngine::Plugin::$p" : () } readdir($dh); my @available_plugins = Koha::SuggestionEngine::AvailablePlugins(); foreach my $plugin (@installed_plugins) { diff --git a/t/db_dependent/Accounts.t b/t/db_dependent/Accounts.t index 26a789c96a..c6a97747eb 100644 --- a/t/db_dependent/Accounts.t +++ b/t/db_dependent/Accounts.t @@ -61,7 +61,6 @@ $dbh->do(q|DELETE FROM issues|); $dbh->do(q|DELETE FROM borrowers|); my $branchcode = $library->{branchcode}; -my $borrower_number; my $context = new Test::MockModule('C4::Context'); $context->mock( 'userenv', sub { diff --git a/t/db_dependent/Acquisition/OrderFromSubscription.t b/t/db_dependent/Acquisition/OrderFromSubscription.t index cc691d0585..aaa0bea86b 100644 --- a/t/db_dependent/Acquisition/OrderFromSubscription.t +++ b/t/db_dependent/Acquisition/OrderFromSubscription.t @@ -31,7 +31,6 @@ my $bookseller = Koha::Acquisition::Bookseller->new( )->store; my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, ''); -my $budgetid; my $bpid = AddBudgetPeriod({ budget_period_startdate => '2015-01-01', budget_period_enddate => '2015-12-31', @@ -56,7 +55,7 @@ my $subscriptionid = NewSubscription( ); die unless $subscriptionid; -my ($basket, $basketno); +my $basketno; ok($basketno = NewBasket($bookseller->id, 1), "NewBasket( " . $bookseller->id . ", 1 ) returns $basketno"); my $cost = 42.00; diff --git a/t/db_dependent/Acquisition/OrderUsers.t b/t/db_dependent/Acquisition/OrderUsers.t index 9d88734d95..f4ffcb2652 100644 --- a/t/db_dependent/Acquisition/OrderUsers.t +++ b/t/db_dependent/Acquisition/OrderUsers.t @@ -41,7 +41,6 @@ my $budgetid = C4::Budgets::AddBudget( ); my $budget = C4::Budgets::GetBudget($budgetid); -my @ordernumbers; my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio( MARC::Record->new, '' ); my $order = Koha::Acquisition::Order->new( diff --git a/t/db_dependent/AdditionalField.t b/t/db_dependent/AdditionalField.t index 93121db687..c2ebd01305 100644 --- a/t/db_dependent/AdditionalField.t +++ b/t/db_dependent/AdditionalField.t @@ -108,7 +108,6 @@ use C4::Serials::Frequency; use C4::Serials::Numberpattern; my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, ''); -my $budgetid; my $bpid = AddBudgetPeriod({ budget_period_startdate => '2015-01-01', budget_period_enddate => '2016-01-01', diff --git a/t/db_dependent/Barcodes.t b/t/db_dependent/Barcodes.t index 97c6e3e2df..f00f8b5789 100755 --- a/t/db_dependent/Barcodes.t +++ b/t/db_dependent/Barcodes.t @@ -149,7 +149,7 @@ my %thash = ( EAN13 => ['0000000695152','892685001928'], ); -my ($obj1,$obj2,$format,$value,$initial,$serial,$re,$next,$previous,$temp); +my ($obj1,$obj2,$format,$value,$initial,$serial,$next,$previous,$temp); my @formats = sort keys %thash; foreach (@formats) { my $pre = sprintf '(%-12s)', $_; @@ -214,7 +214,7 @@ foreach (@formats) { } } -foreach $format (@formats) { +foreach my $format (@formats) { my $pre = sprintf '(%-12s)', $format; foreach my $testval (@{$thash{ $format }}) { if ($format eq 'hbyymmincr') { diff --git a/t/db_dependent/Context.t b/t/db_dependent/Context.t index cb7c94f5fc..532f6cae70 100755 --- a/t/db_dependent/Context.t +++ b/t/db_dependent/Context.t @@ -68,8 +68,6 @@ ok($config = $koha->{config}, 'Getting $koha->{config} '); # Testing syspref caching use Test::DBIx::Class; -my $history; - my $schema = Koha::Database->new()->schema(); $schema->storage->debug(1); my $trace_read; diff --git a/t/db_dependent/Hold.t b/t/db_dependent/Hold.t index 4258ba392e..0c86377182 100755 --- a/t/db_dependent/Hold.t +++ b/t/db_dependent/Hold.t @@ -77,7 +77,7 @@ my $hold = Koha::Hold->new( $hold->store(); my $b1_cal = C4::Calendar->new( branchcode => $branches[1]->{branchcode} ); -$b1_cal->insert_single_holiday( day => 02, month => 01, year => 2017, title => "Morty Day", description => "Rick" ); #Add a holiday +$b1_cal->insert_single_holiday( day => 2, month => 1, year => 2017, title => "Morty Day", description => "Rick" ); #Add a holiday my $today = dt_from_string; is( $hold->age(), $today->delta_days( dt_from_string( '2017-01-01' ) )->in_units( 'days') , "Age of hold is days from reservedate to now if calendar ignored"); is( $hold->age(1), $today->delta_days( dt_from_string( '2017-01-01' ) )->in_units( 'days' ) - 1 , "Age of hold is days from reservedate to now minus 1 if calendar used"); diff --git a/t/db_dependent/LDAP/test_ldap_add.pl b/t/db_dependent/LDAP/test_ldap_add.pl index 1a67748f0c..c64186d253 100755 --- a/t/db_dependent/LDAP/test_ldap_add.pl +++ b/t/db_dependent/LDAP/test_ldap_add.pl @@ -46,7 +46,7 @@ sub hashup { } sub recursive_breakdown { - my $dse = shift or return undef; + my $dse = shift or return; if (ref($dse) =~ /HASH/) { return join "\n", map {"$_\t=> " . recursive_breakdown($dse->{$_})} keys %$dse; } elsif (ref($dse) =~ /ARRAY/) { diff --git a/t/db_dependent/Record/Record.t b/t/db_dependent/Record/Record.t index 0bbfb03568..6fb335fa22 100755 --- a/t/db_dependent/Record/Record.t +++ b/t/db_dependent/Record/Record.t @@ -45,48 +45,48 @@ $ ./Record_test.pl ok (1, 'module compiled'); # open some files for testing -open MARC21MARC8,WHEREAMI."/marc21_marc8.dat" or die $!; +open my $MARC21MARC8, '<', WHEREAMI."/marc21_marc8.dat" or die $!; my $marc21_marc8; # = scalar (MARC21MARC8); -foreach my $line () { +foreach my $line (<$MARC21MARC8>) { $marc21_marc8 .= $line; } $marc21_marc8 =~ s/\n$//; -close MARC21MARC8; +close $MARC21MARC8; -open (MARC21UTF8,"<:utf8",WHEREAMI."/marc21_utf8.dat") or die $!; +open (my $MARC21UTF8, '<:encoding(UTF-8)', WHEREAMI."/marc21_utf8.dat") or die $!; my $marc21_utf8; -foreach my $line () { +foreach my $line (<$MARC21UTF8>) { $marc21_utf8 .= $line; } $marc21_utf8 =~ s/\n$//; -close MARC21UTF8; +close $MARC21UTF8; -open MARC21MARC8COMBCHARS,WHEREAMI."/marc21_marc8_combining_chars.dat" or die $!; +open(my $MARC21MARC8COMBCHARS, '<', WHEREAMI."/marc21_marc8_combining_chars.dat" or die $!; my $marc21_marc8_combining_chars; -foreach my $line() { +foreach my $line(<$MARC21MARC8COMBCHARS>) { $marc21_marc8_combining_chars.=$line; } $marc21_marc8_combining_chars =~ s/\n$//; #FIXME: why is a newline ending up here? -close MARC21MARC8COMBCHARS; +close $MARC21MARC8COMBCHARS; -open (MARC21UTF8COMBCHARS,"<:utf8",WHEREAMI."/marc21_utf8_combining_chars.dat") or die $!; +open (my $MARC21UTF8COMBCHARS, '<:encoding(UTF-8)', WHEREAMI."/marc21_utf8_combining_chars.dat") or die $!; my $marc21_utf8_combining_chars; -foreach my $line() { +foreach my $line(<$MARC21UTF8COMBCHARS>) { $marc21_utf8_combining_chars.=$line; } -close MARC21UTF8COMBCHARS; +close $MARC21UTF8COMBCHARS; -open (MARCXMLUTF8,"<:utf8",WHEREAMI."/marcxml_utf8.xml") or die $!; +open (my $MARCXMLUTF8, '<:encoding(UTF-8)', WHEREAMI."/marcxml_utf8.xml") or die $!; my $marcxml_utf8; -foreach my $line () { +foreach my $line (<$MARCXMLUTF8>) { $marcxml_utf8 .= $line; } -close MARCXMLUTF8; +close $MARCXMLUTF8; $marcxml_utf8 =~ s/\n//g; ## The Tests: -my $error; my $marc; my $marcxml; my $dcxml; # some scalars to store values +my $error; my $marc; my $marcxml; # some scalars to store values ## MARC to MARCXML print "\n1. Checking conversion of simple ISO-2709 (MARC21) records to MARCXML\n"; ok (($error,$marcxml) = marc2marcxml($marc21_marc8,'UTF-8','MARC21'), 'marc2marcxml - from MARC-8 to UTF-8 (MARC21)'); diff --git a/t/db_dependent/Search.t b/t/db_dependent/Search.t index 67a4348d9c..9e308e8470 100644 --- a/t/db_dependent/Search.t +++ b/t/db_dependent/Search.t @@ -92,6 +92,12 @@ END { cleanup(); } +sub matchesExplodedTerms { + my ($message, $query, @terms) = @_; + my $match = '(' . join ('|', map { " \@attr 1=Subject \@attr 4=1 \"$_\"" } @terms) . "){" . scalar(@terms) . "}"; + like($query, qr/$match/, $message); +} + our $QueryStemming = 0; our $QueryAutoTruncate = 0; our $QueryWeightFields = 0; @@ -700,12 +706,6 @@ ok(MARC::Record::new_from_xml($results_hashref->{biblioserver}->{RECORDS}->[0],' matchesExplodedTerms("Simple search for related subjects and keyword 'history' searches related subjects", $query, 'Arizona', 'United States', 'Maricopa County', 'Navajo County', 'Pima County'); like($query, qr/history/, "Simple search for related subjects and keyword 'history' searches for 'history'"); - sub matchesExplodedTerms { - my ($message, $query, @terms) = @_; - my $match = '(' . join ('|', map { " \@attr 1=Subject \@attr 4=1 \"$_\"" } @terms) . "){" . scalar(@terms) . "}"; - like($query, qr/$match/, $message); - } - # authority records use_ok('C4::AuthoritiesMarc'); $UseQueryParser = 0; diff --git a/t/db_dependent/Serials.t b/t/db_dependent/Serials.t index 4c0f56a38d..f0a56a1079 100755 --- a/t/db_dependent/Serials.t +++ b/t/db_dependent/Serials.t @@ -49,7 +49,6 @@ my $bookseller = Koha::Acquisition::Bookseller->new( my ($biblionumber, $biblioitemnumber) = AddBiblio(MARC::Record->new, ''); -my $budgetid; my $bpid = AddBudgetPeriod({ budget_period_startdate => '2015-01-01', budget_period_enddate => '2015-12-31', diff --git a/t/db_dependent/Serials_2.t b/t/db_dependent/Serials_2.t index 95c36f7d8e..5dd08ca216 100644 --- a/t/db_dependent/Serials_2.t +++ b/t/db_dependent/Serials_2.t @@ -39,7 +39,6 @@ my ( $biblionumber, $biblioitemnumber ) = C4::Biblio::AddBiblio($record, ''); my $my_branch = $library1->{branchcode}; my $another_branch = $library2->{branchcode}; -my $budgetid; my $bpid = AddBudgetPeriod({ budget_period_startdate => '2015-01-01', budget_period_enddate => '2015-12-31', diff --git a/t/db_dependent/XISBN.t b/t/db_dependent/XISBN.t index b544c2b30a..15fed733cc 100755 --- a/t/db_dependent/XISBN.t +++ b/t/db_dependent/XISBN.t @@ -25,7 +25,6 @@ $dbh->{AutoCommit} = 0; my $search_module = new Test::MockModule('C4::Search'); $search_module->mock('SimpleSearch', \&Mock_SimpleSearch ); -my $errors; my $context = C4::Context->new; my ( $biblionumber_tag, $biblionumber_subfield ) = diff --git a/t/db_dependent/www/auth_values_input_www.t b/t/db_dependent/www/auth_values_input_www.t index c4f10fc538..d5aa09765a 100644 --- a/t/db_dependent/www/auth_values_input_www.t +++ b/t/db_dependent/www/auth_values_input_www.t @@ -57,7 +57,6 @@ my $dbh = C4::Context->dbh; $intranet =~ s#/$##; my $agent = Test::WWW::Mechanize->new( autocheck => 1 ); -my $jsonresponse; my ($category, $expected_base, $add_form_link_exists, $delete_form_link_exists); # -------------------------------------------------- LOGIN diff --git a/t/dummy.t b/t/dummy.t index fcc57c3b3f..3eb62d4679 100755 --- a/t/dummy.t +++ b/t/dummy.t @@ -1,3 +1,4 @@ # Dummy test until Test::Harness or similar # is used by the other tests to check deps. +use Modern::Perl; print "1..1\nok 1\n"; diff --git a/tags/review.pl b/tags/review.pl index 353e741994..8139b48d31 100755 --- a/tags/review.pl +++ b/tags/review.pl @@ -36,7 +36,7 @@ use C4::Tags qw(get_tags get_approval_rows approval_counts whitelist blacklist i my $script_name = "/cgi-bin/koha/tags/review.pl"; my $needed_flags = { tools => 'moderate_tags' }; # FIXME: replace when more specific permission is created. -sub ajax_auth_cgi ($) { # returns CGI object +sub ajax_auth_cgi { # returns CGI object my $needed_flags = shift; my %cookies = CGI::Cookie->fetch; my $input = CGI->new; @@ -122,8 +122,8 @@ foreach (keys %$counts) { $template->param($_ => $counts->{$_}); } -sub pagination_calc ($;$) { - my $query = shift or return undef; +sub pagination_calc { + my $query = shift or return; my $hardlimit = (@_) ? shift : 100; # hardcoded, could be another syspref my $pagesize = $query->param('limit' ) || $hardlimit; my $page = $query->param('page' ) || 1; diff --git a/test/search.pl b/test/search.pl index 5d4f6e8d76..8d30f985f7 100755 --- a/test/search.pl +++ b/test/search.pl @@ -1,5 +1,6 @@ #!/usr/bin/perl -w +use Modern::Perl; use C4::Search; my @SEARCH = ( diff --git a/tools/batchMod.pl b/tools/batchMod.pl index d3c8d5060b..c17e0099a3 100755 --- a/tools/batchMod.pl +++ b/tools/batchMod.pl @@ -81,7 +81,6 @@ $restrictededition = 0 if ($restrictededition != 0 && C4::Context->IsSuperLibrar $template->param(del => $del); -my $itemrecord; my $nextop=""; my @errors; # store errors found while checking data BEFORE saving item. my $items_display_hashref; @@ -335,7 +334,7 @@ foreach my $tag (sort keys %{$tagslib}) { $subfield_data{marc_lib} ="{$tag}->{$subfield}->{lib}."\">".$tagslib->{$tag}->{$subfield}->{lib}.""; $subfield_data{mandatory} = $tagslib->{$tag}->{$subfield}->{mandatory}; $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable}; - my ($x,$value); + my $value; $value =~ s/"/"/g; if ( !$value && $use_default_values) { $value = $tagslib->{$tag}->{$subfield}->{defaultvalue}; diff --git a/tools/export.pl b/tools/export.pl index 0704b57d6d..599e32b056 100755 --- a/tools/export.pl +++ b/tools/export.pl @@ -88,8 +88,6 @@ if ( $op eq "export" ) { my @biblionumbers = $query->multi_param("biblionumbers"); my @itemnumbers = $query->multi_param("itemnumbers"); my $strip_items_not_from_libraries = $query->param('strip_items_not_from_libraries'); - my @sql_params; - my $sql_query; my $libraries = Koha::Libraries->search_filtered->unblessed; my $only_export_items_for_branches = $strip_items_not_from_libraries ? \@branch : undef; diff --git a/tools/import_borrowers.pl b/tools/import_borrowers.pl index bba512f5f8..cc34835744 100755 --- a/tools/import_borrowers.pl +++ b/tools/import_borrowers.pl @@ -57,7 +57,6 @@ use Text::CSV; use CGI qw ( -utf8 ); -my ( @errors, @feedback ); my $extended = C4::Context->preference('ExtendedPatronAttributes'); my @columnkeys = map { $_ ne 'borrowernumber' ? $_ : () } Koha::Patrons->columns(); @@ -65,8 +64,6 @@ push( @columnkeys, 'patron_attributes' ) if $extended; my $input = CGI->new(); -#push @feedback, {feedback=>1, name=>'backend', value=>$csv->backend, backend=>$csv->backend}; #XXX - my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "tools/import_borrowers.tt", diff --git a/tools/letter.pl b/tools/letter.pl index 5f901495ee..a85e9df3ca 100755 --- a/tools/letter.pl +++ b/tools/letter.pl @@ -188,7 +188,7 @@ sub add_form { code => $code, ); my $first_flag_name = 1; - my ( $lang, @templates ); + my $lang; # The letter name is contained into each mtt row. # So we can only sent the first one to the template. for my $letter ( @$letters ) { diff --git a/tools/modborrowers.pl b/tools/modborrowers.pl index 7b8587ad04..428a0d0ae1 100755 --- a/tools/modborrowers.pl +++ b/tools/modborrowers.pl @@ -64,10 +64,9 @@ if ( $op eq 'show' ) { my $patron_list_id = $input->param('patron_list_id'); my @borrowers; my @cardnumbers; - my ( @notfoundcardnumbers, @from_another_group_of_libraries ); + my @notfoundcardnumbers; # Get cardnumbers from a file or the input area - my @contentlist; if ($filefh) { while ( my $content = <$filefh> ) { $content =~ s/[\r\n]*$//g; diff --git a/tools/overduerules.pl b/tools/overduerules.pl index 616f6070ea..8eb21627e8 100755 --- a/tools/overduerules.pl +++ b/tools/overduerules.pl @@ -216,8 +216,6 @@ my $letters = C4::Letters::GetLettersAvailableForALibrary( } ); -my @line_loop; - my $message_transport_types = C4::Letters::GetMessageTransportTypes(); my ( @first, @second, @third ); for my $patron_category (@patron_categories) { diff --git a/tools/picture-upload.pl b/tools/picture-upload.pl index 804bd96b92..767a41ea63 100755 --- a/tools/picture-upload.pl +++ b/tools/picture-upload.pl @@ -211,7 +211,8 @@ sub handle_dir { if ( $filename =~ m/datalink\.txt/i || $filename =~ m/idlink\.txt/i ); } - unless ( open( FILE, $file ) ) { + my $fh; + unless ( open( $fh, '<', $file ) ) { warn "Opening $dir/$file failed!"; $direrrors{'OPNLINK'} = $file; # This error is fatal to the import of this directory contents @@ -219,7 +220,7 @@ sub handle_dir { return \%direrrors; } - while ( my $line = ) { + while ( my $line = <$fh> ) { $debug and warn "Reading contents of $file"; chomp $line; $debug and warn "Examining line: $line"; @@ -239,7 +240,7 @@ sub handle_dir { $source = "$dir/$filename"; %counts = handle_file( $cardnumber, $source, $template, %counts ); } - close FILE; + close $fh; closedir DIR; } else { @@ -282,9 +283,9 @@ sub handle_file { return %count; } my ( $srcimage, $image ); - if ( open( IMG, "$source" ) ) { - $srcimage = GD::Image->new(*IMG); - close(IMG); + if ( open( my $fh, '<', $source ) ) { + $srcimage = GD::Image->new($fh); + close($fh); if ( defined $srcimage ) { my $imgfile; my $mimetype = 'image/png'; @@ -335,7 +336,6 @@ sub handle_file { undef $srcimage; # This object can get big... } $debug and warn "Image is of mimetype $mimetype"; - my $dberror; if ($mimetype) { my $patron = Koha::Patrons->find({ cardnumber => $cardnumber }); if ( $patron ) { diff --git a/tools/upload-cover-image.pl b/tools/upload-cover-image.pl index 009c890d0d..3b5d183522 100755 --- a/tools/upload-cover-image.pl +++ b/tools/upload-cover-image.pl @@ -130,8 +130,8 @@ if ($fileID) { else { next; } - if ( open( FILE, $file ) ) { - while ( my $line = ) { + if ( open( my $fh, '<', $file ) ) { + while ( my $line = <$fh> ) { my $delim = ( $line =~ /\t/ ) ? "\t" : ( $line =~ /,/ ) ? "," @@ -169,7 +169,7 @@ if ($fileID) { undef $srcimage; } } - close(FILE); + close($fh); } else { $error = 'OPNLINK'; diff --git a/xt/author/show-template-structure.pl b/xt/author/show-template-structure.pl index 6c234875bc..ad496db474 100755 --- a/xt/author/show-template-structure.pl +++ b/xt/author/show-template-structure.pl @@ -56,7 +56,7 @@ Output is sent to STDOUT. scalar(@ARGV) == 1 or die "Usage: $0 template-file\n"; my $file = $ARGV[0]; -open IN, $file or die "Failed to open template file $file: $!\n"; +open my $fh, '<', $file or die "Failed to open template file $file: $!\n"; my %valid_tmpl_tags = ( tmpl_var => 1, @@ -87,7 +87,7 @@ sub emit { print " " x ( $level - 1 ), shift; } -while () { +while (<$fh>) { $lineno++; # look for TMPL_IF, TMPL_ELSE, TMPL_UNLESS, and TMPL_LOOPs in HTML comments @@ -147,7 +147,7 @@ while () { } } -close IN; +close $fh; # anything left in the stack? if (scalar @tag_stack > 0) { diff --git a/xt/author/translatable-templates.t b/xt/author/translatable-templates.t index b3ef5ff445..bc4cd1501f 100644 --- a/xt/author/translatable-templates.t +++ b/xt/author/translatable-templates.t @@ -69,7 +69,7 @@ sub test_string_extraction { my $command = "PERL5LIB=\$PERL5LIB:$misc_translator_dir ./tmpl_process3.pl create -i $template_dir -s $po_dir/$module.po -r --pedantic-warnings"; - open (NULL, ">", File::Spec->devnull); + open (NULL, ">", File::Spec->devnull); ## no critic (BarewordFileHandles) print NULL "foo"; # avoid warning; my $pid = open3(gensym, ">&NULL", \*PH, $command); my @warnings; diff --git a/xt/find-license-problems b/xt/find-license-problems index c18f2c195a..641a466f53 100755 --- a/xt/find-license-problems +++ b/xt/find-license-problems @@ -46,8 +46,8 @@ sub has_gpl2plus_and_current_fsf_address { my $hasv2; my $hasorlater; my $hasfranklinst; - open(FILE, $name) || return 0; - while (my $line = ) { + open(my $fh, '<', $name) || return 0; + while (my $line = <$fh>) { $hascopyright = 1 if ($line =~ /Copyright.*\d\d/); $hasgpl = 1 if ($line =~ /GNU General Public License/); $hasv2 = 1 if ($line =~ /either version 2/); @@ -55,6 +55,7 @@ sub has_gpl2plus_and_current_fsf_address { $line =~ /at your option/); $hasfranklinst = 1 if ($line =~ /51 Franklin Street/); } + close($fh); return ! $hascopyright || ($hasgpl && $hasv2 && $hasorlater && $hasfranklinst); } diff --git a/xt/fix-old-fsf-address b/xt/fix-old-fsf-address index 523db42d01..aa32da0a23 100755 --- a/xt/fix-old-fsf-address +++ b/xt/fix-old-fsf-address @@ -114,19 +114,19 @@ sub dashcomment { sub readfile { my ($filename) = @_; - open(FILE, $filename) || die("Can't open $filename for reading"); + open(my $fh, '<', $filename) || die("Can't open $filename for reading"); my @lines; - while (my $line = ) { + while (my $line = <$fh>) { push @lines, $line; } - close(FILE); + close($fh); return join '', @lines; } sub try_to_fix { my ($data, @patterns) = @_; - return undef; + return; } diff --git a/xt/single_quotes.t b/xt/single_quotes.t index 4c6a9e8cd0..402b51cc64 100755 --- a/xt/single_quotes.t +++ b/xt/single_quotes.t @@ -42,7 +42,7 @@ close $dh; my @files; find( sub { - open my $fh, $_ or die "Could not open $_: $!"; + open my $fh, '<', $_ or die "Could not open $_: $!"; my @lines = sort grep /\_\(\'/, <$fh>; push @files, { name => "$_", lines => \@lines } if @lines; }, -- 2.17.1