diff --git a/ChangeLog b/ChangeLog index c910d54..0653e12 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,17 +1,37 @@ RCS file: RCS/imapsync,v Working file: imapsync -head: 1.580 +head: 1.584 branch: locks: strict - gilles: 1.580 + gilles: 1.584 access list: symbolic names: keyword substitution: kv -total revisions: 580; selected revisions: 580 +total revisions: 584; selected revisions: 584 description: ---------------------------- -revision 1.580 locked by: gilles; +revision 1.584 locked by: gilles; +date: 2014/02/05 00:40:59; author: gilles; state: Exp; lines: +77 -50 +Debug. Print separator given by NAMESPACE even when --sep1 oe --sep2 is used. +Debug. Prints prefix given by NAMESPACE even when --prefix1 or --prefix2 is used. +(Preparation for advising not to use --prefix unless suggested) +---------------------------- +revision 1.583 +date: 2014/02/04 03:04:35; author: gilles; state: Exp; lines: +15 -11 +Bug fix. --ssl1 --tls2 was buggy because of default SSL_VERIFY_PEER. "Can not go to tls encryption on [localhost]:Unable to start TLS: Cannot determine peer hostname for verificationerror:00000000:lib(0):func(0):reason(0)" +---------------------------- +revision 1.582 +date: 2014/01/24 01:43:19; author: gilles; state: Exp; lines: +20 -12 +Bugfix. Check if going to tls is ok, exit otherwise with explicit error message. +Thanks to Dennis Schridde for reporting this ugly bug. +---------------------------- +revision 1.581 +date: 2014/01/15 02:42:06; author: gilles; state: Exp; lines: +41 -15 +Added --debugmaxlinelength +Added --minmaxlinelength to select messages with long lines only. +---------------------------- +revision 1.580 date: 2013/12/25 02:52:36; author: gilles; state: Exp; lines: +51 -27 Added --skipcrossduplicates to avoid copying messages that are already copied in another folder. Added --debugcrossduplicates to print which messages (UIDs) are skipped with --skipcrossduplicates (and in what other folders they are). diff --git a/FAQ b/FAQ index 74b5b58..58d2c84 100644 --- a/FAQ +++ b/FAQ @@ -1,5 +1,5 @@ #!/bin/cat -# $Id: FAQ,v 1.161 2013/12/25 03:25:18 gilles Exp gilles $ +# $Id: FAQ,v 1.166 2014/01/27 02:23:30 gilles Exp gilles $ +------------------+ | FAQ for imapsync | @@ -1601,11 +1601,15 @@ R. This error message comes from Exchange IMAP server when it encounters any problem. Most of the time it is one of the following: * Some messages are bigger than the size limit. 10 MB by default - on Exchange. It can be upped by configuration. - Or use option --maxsize 10000000 (for 10 MB, change it if needed) - to tell imapsync to skip those messages. + on Exchange. It can be upped by configuration for Exchange. + If you configure this limit then use option --maxsize 10000000 + for 10 MB, change it if needed) to tell imapsync to skip those messages. + This value is 25 MB for Office365 --maxsize 25000000 - imapsync ... --maxsize 10000000 + imapsync ... --maxsize 10000000 # 10 MB for Exchange + + imapsync ... --maxsize 25000000 # 25 MB for Office365 + * Quota reached. The whole account is full. It can be upped by configuration. @@ -1645,45 +1649,7 @@ Thanks to Dave Murray and Simon Savva for reporting and solving this issue. ======================================================================= -Q. From Zimbra to XXX - -imapsync ... \ - --exclude "Conversation Action Settings" \ - --exclude "Quick Step Settings" \ - --exclude "News Feed" - -======================================================================= -Q. From or to HMailServer version 4.4.1. - -R. You have to add prefix and separator manually because 4.4.1 doesn't -honor the NAMESPACE imap command. - -Example for host1: - -imapsync ... \ - --prefix1 "" --sep1 . - -No specific option for HMailServer 5.3.3 since NAMESPACE is supported. - -Maybe --subscribe_all will help you to see all migrated folders. - - -======================================================================= -Q. Synchronizing from SmarterMail to XXX - -imapsync --host1 imap.d1.org --user1 joe --password1 secret1 --sep1 "/" \ - --host2 imap.d2.org --user2 joe --password2 secret2 \ - --noauthmd5 \ - --prefix1 "" \ - --regextrans2 's#^Inbox$#INBOX#' \ - --regextrans2 's#Sent Items$#Sent#' \ - --dry --justfolders - -Maybe add other --regextrans2 to change folder names and see the result. -When satisfied, run without --dry --justfolders - -======================================================================= -Q. Synchronizing from XXX to Gmail +Q. Synchronizing from XXX to Gmail R. There are some details to get the special [Gmail] sub-folders right. Here's an example of migrating an old "Sent" folder to @@ -1692,37 +1658,36 @@ R. There are some details to get the special [Gmail] sub-folders imapsync --host1 mail.oldhost.com \ --user1 my_email@oldhost.com \ --password1 password \ - --host2 imap.gmail.com --ssl2 \ + --host2 imap.gmail.com \ --user2 my_email@gmail.com \ --password2 password \ + --ssl2 \ --exitwhenover 500000000 \ - --exclude "\[Gmail\]$" \ --addheader \ - --regextrans2 "s,^Sent$,[Gmail]/Sent Mail," \ - --regextrans2 "s/[ ]+/_/g" \ - --regextrans2 "s/[\^]/_/g" \ - --regextrans2 "s/['\"\\\\]/_/g" + --exclude "\[Gmail\]$" \ + --regextrans2 "s/[ ]+/_/g" \ + --regextrans2 "s/[\^]/_/g" \ + --regextrans2 "s/['\"\\\\]/_/g" \ + --regextrans2 "s,^Sent$,[Gmail]/Sent Mail," +Explanations: -If you're using a different language in Gmail you might adapt -this example with the folder name translated, an example in French: +--ssl2 is mandatory since Gmail only supports imap ssl connections. -imapsync ... - --regextrans2 "s,^Messages envoy&AOk-s$,[Gmail]/Messages envoy&AOk-s," \ +--exitwhenover 500000000 option is here to avoid locking when +transfers exceed maximum limit. +See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518 +--exitwhenover is not mandatory in the sense you may be able to +use an upper value than 500 MB without disconnections; I don't +know the hard value, it seems to vary, so just have some tries +and report me what you discover in case you detect something. The --addheader option is there because "Sent" folder messages -sometimes lack the "Message-Id" header needed by imapsync -to identify messages (only when --useuid is not used). -So option --addheader adds a "Message-Id" header. - -You can add --folder "INBOX.Sent" in the example in case -you want to sync only the "Sent" folder. - -The "All Mail" archive pseudo-folder should be updated automaticaly. - ---exitwhenover option is here to avoid locking when transfers -exceed maximum limit. -See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518 +sometimes lack the "Message-Id:" and "Received:" headers needed +by imapsync to identify messages (only when --useuid is not used). +So option --addheader adds a "Message-Id" header consiting fo +the imap UID of the message on the host1 folder, like +"Message-Id: 12345@imapsync". --exclude "\[Gmail\]$" is there to avoid a small examine/select error: "Could not examine: 43 NO [NONEXISTENT] Unknown Mailbox: [Gmail] @@ -1740,9 +1705,25 @@ not accepted by gmail, character ^ to character _ underscore. --regextrans2 "s/['\"\\\\]/_/g" is optional. It converts characters ' or " or \ to character _ underscore. +--regextrans2 "s,^Sent$,[Gmail]/Sent Mail," is to transform the +folder name "Sent" and adapt it to Gmail "Sent Mail" folder. +If you're using a different language in Gmail you might adapt +this example with the folder name translated, an example in French: + +imapsync ... + --regextrans2 "s,^Messages envoy&AOk-s$,[Gmail]/Messages envoy&AOk-s," \ + + +You can add --folder "INBOX.Sent" in the example in case +you want to sync only the "Sent" folder. + You can select folders exported to imap within the gmail preferences, unselect all "System labels" depending on your needs. +The "All Mail" archive pseudo-folder should be updated automaticaly. + + + ======================================================================= Q. Some of the folders are getting created with [IMAP] prefix on Google side. How to stop creating folder with this prefix? @@ -1752,21 +1733,47 @@ R. No switch in imapsync since [IMAP]/ prefix is done by Gmail, it might be configurable with Gmail parameters. ======================================================================= -Q. Synchronizing from Gmail to XXX +Q. Synchronizing from Gmail to XXX R. Gmail needs SSL ./imapsync \ --host1 imap.gmail.com \ - --ssl1 \ --user1 gilles.lamiral@gmail.com \ --password1 gmailsecret \ - --exitwhenover 2500000000 \ --host2 localhost --user2 tata \ --password2 tatasecret \ + --ssl1 \ + --exitwhenover 2500000000 \ --useheader="X-Gmail-Received" \ - --useheader 'Message-Id' + --useheader "Message-Id" \ + --skipcrossduplicates \ + --folderfirst "Work" \ + --folderfirst "Friends" \ + --folderlast "CanWait" \ + --folderlast "[Gmail]/All Mail" + + +Explanations: + +--ssl1 is mandatory since Gmail only supports imap ssl connections. + +--exitwhenover 2500000000 option is here to avoid locking when +transfers exceed maximum limit. +See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518 +--exitwhenover is not mandatory in the sense you may be able to +use an upper value than 2.5 GB without disconnections; I don't +know the hard value, it seems to vary, so just have some tries +and report me what you discover in case you detect something. + +--useheader="X-Gmail-Received" --useheader "Message-Id" are not +mandatory. I use them because I found (several years ago, it may +have changed) that Gmail always adds a different header +"X-Gmail-Received:" to all messages it gets. So the identification +by imapsync can not fall using this header. "Message-Id" is there +for safety about this Gmail rule. + If your destination imap server doesn't like "[Gmail]" name, just add option: @@ -1779,6 +1786,27 @@ unselect all "System labels". exceed maximum limit. See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518 +--skipcrossduplicates is optional but it can save Gigabytes of hard +disk memory. Within imap protocol, Gmail presents Gmail labels as +folders so a message labeled "Work" "ProjectX" "Urgent" ends up +in three different imap folders "Work" "ProjectX" and "Urgent" +after an imap sync. --skipcrossduplicates prevent this behavior. + +An issue with --skipcrossduplicates is that the first label synced +by imapsync goes to its corresponding folder and other labels are +ignored. This way, at least you can choose what labels have the +priority by using the --folderfirst option. For example +--folderfirst "Work" will sync messages labeled "Work" before +messages labeled "CanWait" or "Urgent". By default imapsync +syncs folders (Gmail labels) using the classical alphanumeric order. + +--folderlast "CanWait" will sync only messages that have the +label CanWait and only it. + +--folderlast "[Gmail]/All Mail", in conjonction with option +--skipcrossduplicates, will only put in "[Gmail]/All Mail" +the messages that are not labeled at all. + ======================================================================= Q. How to use XOAUTH to globally authenticate gmail users? @@ -1826,6 +1854,43 @@ http://www.linux-france.org/prj/imapsync_list/msg00639.html http://biasecurities.com/blog/2009/migrate-email-from-gmail-to-google-apps/ http://www.thamtech.com/blog/2008/03/29/gmail-to-google-apps-email-migration/ +======================================================================= +Q. From Zimbra to XXX + +imapsync ... \ + --exclude "Conversation Action Settings" \ + --exclude "Quick Step Settings" \ + --exclude "News Feed" + +======================================================================= +Q. From or to HMailServer version 4.4.1. + +R. You have to add prefix and separator manually because 4.4.1 doesn't +honor the NAMESPACE imap command. + +Example for host1: + +imapsync ... \ + --prefix1 "" --sep1 . + +No specific option for HMailServer 5.3.3 since NAMESPACE is supported. + +Maybe --subscribe_all will help you to see all migrated folders. + + +======================================================================= +Q. Synchronizing from SmarterMail to XXX + +imapsync --host1 imap.d1.org --user1 joe --password1 secret1 --sep1 "/" \ + --host2 imap.d2.org --user2 joe --password2 secret2 \ + --prefix1 "" \ + --regextrans2 "s#Sent Items$#Sent#" \ + --dry --justfolders + +Maybe add other --regextrans2 to change folder names and see the result. +When satisfied, run without --dry --justfolders + + ======================================================================= Q. Synchronizing from Yahoo to XXX diff --git a/Makefile b/Makefile index 2740d1d..b9ce90e 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ -# $Id: Makefile,v 1.139 2013/12/25 11:36:53 gilles Exp gilles $ +# $Id: Makefile,v 1.141 2014/02/13 03:18:50 gilles Exp gilles $ .PHONY: help usage all @@ -8,6 +8,10 @@ help: usage usage: @echo " imapsync $(VERSION), You can do :" @echo "make install # as root" + @echo "make install_dependencies # it installs needed Perl modules from CPAN" + @echo "" + @echo "All other goals are for the upstream developper" + @echo "make testf # run tests" @echo "make testv # run tests verbosely" @echo "make test_quick # few tests verbosely" @@ -92,6 +96,9 @@ install: testp imapsync.1 install imapsync.1 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1 chmod 644 $(DESTDIR)$(PREFIX)/share/man/man1/imapsync.1 +install_dependencies: + sh examples/install_modules_linux.sh + .PHONY: cidone ci ci: cidone @@ -345,6 +352,7 @@ upload_lfo: .valid.index.shtml: index.shtml + tidy -q index.shtml> /dev/null validate --verbose index.shtml touch .valid.index.shtml diff --git a/README b/README index 60ba875..f0b43c9 100644 --- a/README +++ b/README @@ -4,7 +4,7 @@ NAME More than 52 different IMAP server softwares supported with success, few failures. - $Revision: 1.580 $ + $Revision: 1.584 $ SYNOPSIS To synchronize imap account "foo" on "imap.truc.org" to imap account @@ -383,7 +383,8 @@ IMAP SERVERS - Samsung Contact IMAP server 8.5.0 - Scalix v10.1, 10.0.1.3, 11.0.0.431, 11.4.6 - Sendmail Mail Store IMAP4rev1 (5.5.6/mstore-5-5-build-1874 [host1]. - - SmarterMail, Smarter Mail 5.0 Enterprise, Smarter Mail 5.5 [host1], SmarterMail Professional 10.2 [host1]. + - SmarterMail, Smarter Mail 5.0 Enterprise, Smarter Mail 5.5 [host1], + SmarterMail Professional 10.2 [host1], Smarter Mail 11.7 [host1][host2]. - Softalk Workgroup Mail 7.6.4 [host1]. - SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System) - Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05, 6.3 @@ -471,5 +472,5 @@ SIMILAR SOFTWARES Feedback (good or bad) will often be welcome. - $Id: imapsync,v 1.580 2013/12/25 02:52:36 gilles Exp gilles $ + $Id: imapsync,v 1.584 2014/02/05 00:40:59 gilles Exp gilles $ diff --git a/VERSION b/VERSION index ef68d40..5136b76 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.580 +1.584 diff --git a/VERSION_EXE b/VERSION_EXE index ef68d40..5136b76 100644 --- a/VERSION_EXE +++ b/VERSION_EXE @@ -1 +1 @@ -1.580 +1.584 diff --git a/W/.BUILD_EXE_TIME b/W/.BUILD_EXE_TIME index ec754ed..58622a6 100644 --- a/W/.BUILD_EXE_TIME +++ b/W/.BUILD_EXE_TIME @@ -263,3 +263,9 @@ 1387941690 BEGIN 1.580 : mercredi 25 décembre 2013, 04:21:30 (UTC+0100) 1387967067 BEGIN 1.580 : mercredi 25 décembre 2013, 11:24:28 (UTC+0100) 1387967901 END 1.580 : mercredi 25 décembre 2013, 11:38:21 (UTC+0100) +1390615061 BEGIN 1.582 : samedi 25 janvier 2014, 02:57:41 (UTC+0100) +1390685504 END 1.582 : samedi 25 janvier 2014, 22:31:44 (UTC+0100) +1390874372 BEGIN 1.582 : mardi 28 janvier 2014, 02:59:33 (UTC+0100) +1390875240 END 1.582 : mardi 28 janvier 2014, 03:14:00 (UTC+0100) +1391561330 BEGIN 1.584 : mercredi 5 février 2014, 01:48:50 (UTC+0100) +1391562789 END 1.584 : mercredi 5 février 2014, 02:13:09 (UTC+0100) diff --git a/W/Mail-IMAPClient-3.35.tar.gz b/W/Mail-IMAPClient-3.35.tar.gz deleted file mode 100644 index d38f41e..0000000 Binary files a/W/Mail-IMAPClient-3.35.tar.gz and /dev/null differ diff --git a/W/learn/imap_tcpdump b/W/learn/imap_tcpdump new file mode 100644 index 0000000..10200dc --- /dev/null +++ b/W/learn/imap_tcpdump @@ -0,0 +1,3 @@ + +tcpdump -s0 -A -i lo port imap + diff --git a/W/learn/longline b/W/learn/longline new file mode 100755 index 0000000..e04abdb --- /dev/null +++ b/W/learn/longline @@ -0,0 +1,10 @@ +#!/bin/sh + + +# Generate messages with line lenght of 10000 11000 ... up to 99000 characters +for M in `count 10 99`; do + echo $M + { echo Hello Guys; echo ; perl -e "print 'L' x ${M}000" ; echo; echo END; } \ + | mail.mailutils -s "line of ${M}000 char" tata@localhost. +done + diff --git a/W/learn/longline_10000_11000 b/W/learn/longline_10000_11000 new file mode 100755 index 0000000..5eb5425 --- /dev/null +++ b/W/learn/longline_10000_11000 @@ -0,0 +1,12 @@ +#!/bin/sh + +# $Id: longline_10000_11000,v 1.2 2014/01/15 02:21:38 gilles Exp gilles $ + +# Test Exchange limit for maxlinelenght +# Generate messages with line lenght of 10000 10100 ... up to 10990 characters +for M in `count 10 99`; do + echo $M + { echo Hello Guys; echo ; perl -e "print 'L' x 10${M}0" ; echo; echo END; } \ + | mail.mailutils -s "line of 10${M}0 characters" tata@localhost. +done + diff --git a/W/paypal_reply/memo b/W/paypal_reply/memo index f64a5d3..544bb81 100644 --- a/W/paypal_reply/memo +++ b/W/paypal_reply/memo @@ -28,7 +28,35 @@ Europe a un autre assujetti : Article 262 ter => Exoneration EOF } -echo paypal_bilan_bncexport2 + +echo paypal_bilan_tva_taux_20 +paypal_bilan_tva_taux_20() { +# DID output diff between paypal_bilan_1.70 and 1.71 +( +#set -x +perl -c /g/public_html/imapsync/W/paypal_reply/paypal_bilan || return 1 +/g/public_html/imapsync/W/paypal_reply/paypal_bilan_1.70 --bnc --debug --details --debug_invoice --first_in 147 \ + --avoid_numbers '292 293 643 644 731 732 1093 +1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 +2625 2626 2970 2971 2972 3093' \ + /g/paypal/paypal_201[01234]_??_complet.csv \ + > /g/var/paypal_bilan/tests/paypal_invoice.out1 2>&1 + +/g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug --details --debug_invoice --first_in 147 \ + --avoid_numbers '292 293 643 644 731 732 1093 +1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 +2625 2626 2970 2971 2972 3093' \ + /g/paypal/paypal_201[01234]_??_complet.csv \ + > /g/var/paypal_bilan/tests/paypal_invoice.out2 2>&1 + +echo diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2 + diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/tests/paypal_invoice.out2 +) +} + + + +#echo paypal_bilan_bncexport2 paypal_bilan_bncexport2() { # DID output diff between paypal_bilan_1.66 and 1.67 ( @@ -54,7 +82,7 @@ echo diff /g/var/paypal_bilan/tests/paypal_invoice.out1 /g/var/paypal_bilan/test } -echo paypal_bilan_bncexport +#echo paypal_bilan_bncexport paypal_bilan_bncexport() { # DID output diff between paypal_bilan_1.66 and 1.67 ( diff --git a/W/paypal_reply/paypal_bilan b/W/paypal_reply/paypal_bilan index 1187e88..be96933 100755 --- a/W/paypal_reply/paypal_bilan +++ b/W/paypal_reply/paypal_bilan @@ -1,6 +1,6 @@ #!/usr/bin/perl -# $Id: paypal_bilan,v 1.68 2013/06/07 06:59:41 gilles Exp gilles $ +# $Id: paypal_bilan,v 1.72 2014/01/18 01:38:35 gilles Exp gilles $ use strict; use warnings; @@ -13,7 +13,7 @@ use Test::More 'no_plan' ; die unless (utf8_supported_charset('ISO-8859-1')); -my $rcs = '$Id: paypal_bilan,v 1.68 2013/06/07 06:59:41 gilles Exp gilles $ ' ; +my $rcs = '$Id: paypal_bilan,v 1.72 2014/01/18 01:38:35 gilles Exp gilles $ ' ; $rcs =~ m/,v (\d+\.\d+)/ ; my $VERSION = ($1) ? $1: "UNKNOWN" ; @@ -140,7 +140,7 @@ foreach my $invoice ( @invoices_wanted ) { if ( $invoice_sent ) { $invoice_sent{ $invoice }++ ; - #build_invoice( $invoice ) ; + build_invoice( $invoice ) if ( $debug_invoice or $debug_invoice_utf8 ) ; }elsif( not ( $invoice_canceled{ $invoice } or $invoice_refund{ $invoice } ) ) { $invoice_not_sent{ $invoice }++ ; build_invoice( $invoice ) ; @@ -371,10 +371,11 @@ sub tests_exportbnc { sub tests { tests_next_invoice( ) ; - #tests_half( ) ; tests_cut( ) ; tests_invoice_00000( ) ; - tests_exportbnc( ) ; + #tests_exportbnc( ) ; + tests_tva_rate( ) ; + tests_tva_rate_str( ) ; } sub compute_line { @@ -677,7 +678,7 @@ sub build_invoice { $priceTTCusd, $HTorTTC ) - = tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet ) ; + = tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet, $Date ) ; my $object_type = object_type( $Titre_de_l_objet ) ; @@ -1058,6 +1059,62 @@ sub date_aaaa_mm_jj { } +sub tva_rate { + my $date_aaaa_mm_jj = shift ; + + if ( '2014_01_01' gt $date_aaaa_mm_jj ) { + #print "tva_rate 0.196\n" ; + #return( 0 ) ; + return( 0.196 ) ; + } + + if ( '2014_01_01' le $date_aaaa_mm_jj ) { + #print "tva_rate 0.2\n" ; + return( 0.2 ) ; + } + #print "tva_rate 0\n" ; + return( 0 ) ; +} + +sub tests_tva_rate { + ok( 0.196 == tva_rate( '2013_01_01' ), 'tva_rate: old 0.196' ) ; + ok( 0.196 == tva_rate( '2013_12_31' ), 'tva_rate: old 0.196' ) ; + ok( 0.2 == tva_rate( '2014_01_01' ), 'tva_rate: new 0.2' ) ; + ok( 0.2 == tva_rate( '2014_12_31' ), 'tva_rate: new 0.2' ) ; + ok( 0.2 == tva_rate( '2050_01_01' ), 'tva_rate: new 0.2' ) ; + ok( 0.2 == tva_rate( '2050_12_31' ), 'tva_rate: new 0.2' ) ; + return( 0 ) ; +} + + +sub tva_rate_str { + my $date_aaaa_mm_jj = shift ; + + if ( '2014_01_01' gt $date_aaaa_mm_jj ) { + #print "tva_rate 0.196\n" ; + return( '19,60\%' ) ; + } + + if ( '2014_01_01' le $date_aaaa_mm_jj ) { + return( '20\%' ) ; + } + #print "tva_rate 0\n" ; + return( '' ) ; +} + +sub tests_tva_rate_str { + ok( '19,60\%' eq tva_rate_str( '2013_01_01' ), 'tva_rate_str: old 0.196' ) ; + ok( '19,60\%' eq tva_rate_str( '2013_12_31' ), 'tva_rate_str: old 0.196' ) ; + ok( '20,00\%' eq tva_rate_str( '2014_01_01' ), 'tva_rate_str: new 0.2' ) ; + ok( '20,00\%' eq tva_rate_str( '2014_12_31' ), 'tva_rate_str: new 0.2' ) ; + ok( '20,00\%' eq tva_rate_str( '2050_01_01' ), 'tva_rate_str: new 0.2' ) ; + ok( '20,00\%' eq tva_rate_str( '2050_12_31' ), 'tva_rate_str: new 0.2' ) ; + return( 0 ) ; +} + + + + sub tva_line { my( $Devise, $Montant2, $Pays, $Nom_Option_1, $Valeur_Option_1, $Titre_de_l_objet, $Date ) = @_ ; my( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) = ( 0, 0, 0 ) ; @@ -1080,8 +1137,8 @@ sub tva_line { or ( 'France' eq $Pays ) ) { - $montant_HT_EUR_ass = $Montant2 / 1.196 ; - $montant_TVA_EUR = $Montant2 / 1.196 * 0.196 ; + $montant_HT_EUR_ass = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ; + $montant_TVA_EUR = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ; $debug_dev and print "$Montant2 $Pays $Valeur_Option_1\n" ; }else{ $montant_HT_EUR_exo = $Montant2 ; @@ -1096,8 +1153,8 @@ sub tva_line { or ( '2013_02_19' gt $date_aaaa_mm_jj ) ) { - $montant_HT_EUR_sup = $Montant2 / 1.196 ; - $montant_TVA_EUR_sup = $Montant2 / 1.196 * 0.196 ; + $montant_HT_EUR_sup = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ; + $montant_TVA_EUR_sup = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ; }else{ $montant_HT_EUR_sup_exo = $Montant2 ; } @@ -1109,10 +1166,12 @@ sub tva_line { sub tva_stuff { - my( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet ) = @_ ; + my( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet, $Date ) = @_ ; my $priceTTCusd = '' ; $Hors_taxe =~ s{,}{.} ; + + my $date_aaaa_mm_jj = date_aaaa_mm_jj( $Date ) ; if ( $Devise eq 'USD' ) { $priceTTCusd = "(usd $Hors_taxe)" ; @@ -1134,10 +1193,10 @@ sub tva_stuff { or ( 'France' eq $Pays ) ) { - $priceHT = sprintf('%2.2f', $Hors_taxe/1.196) ; - $tvaFR = '19,60\%'; - $tvaEN = ''; - $priceTVA = sprintf('%2.2f', $Hors_taxe/1.196*0.196) ; + $priceHT = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ) ; + $tvaFR = tva_rate_str( $date_aaaa_mm_jj ) ; + $tvaEN = '' ; + $priceTVA = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ) ; $priceTTC = sprintf('%2.2f', $Hors_taxe) ; $HTorTTC = 'TTC' ; $messageTVAFR = '' ; @@ -1246,19 +1305,6 @@ $addr = " } -sub half { - my $string = shift ; - my $half = int( lenght( $string ) / 2 ) ; - # TO BE DONE - -} - -sub tests_half { - my( $aa, $bb ) = half( 'aa bb' ) ; - ok( 'aa' eq $aa, 'half: aa' ) ; - ok( 'bb' eq $bb, 'half: bb' ) ; -} - sub cut { my $string = shift ; my $offset = shift ; diff --git a/W/paypal_reply/paypal_bilan_1.66 b/W/paypal_reply/paypal_bilan_1.70 similarity index 91% rename from W/paypal_reply/paypal_bilan_1.66 rename to W/paypal_reply/paypal_bilan_1.70 index c9c3d7a..762bb29 100755 --- a/W/paypal_reply/paypal_bilan_1.66 +++ b/W/paypal_reply/paypal_bilan_1.70 @@ -1,6 +1,6 @@ #!/usr/bin/perl -# $Id: paypal_bilan,v 1.66 2013/03/26 19:50:20 gilles Exp gilles $ +# $Id: paypal_bilan,v 1.70 2014/01/17 15:27:11 gilles Exp gilles $ use strict; use warnings; @@ -13,7 +13,7 @@ use Test::More 'no_plan' ; die unless (utf8_supported_charset('ISO-8859-1')); -my $rcs = '$Id: paypal_bilan,v 1.66 2013/03/26 19:50:20 gilles Exp gilles $ ' ; +my $rcs = '$Id: paypal_bilan,v 1.70 2014/01/17 15:27:11 gilles Exp gilles $ ' ; $rcs =~ m/,v (\d+\.\d+)/ ; my $VERSION = ($1) ? $1: "UNKNOWN" ; @@ -87,10 +87,9 @@ if ( $tests ) { my @files = @ARGV ; -my %action_of_invoice ; +my %action_invoice ; my %invoice_paypal ; -#$invoice_paypal{ $first_invoice } = 1 ; my @invoices_wanted = split( /\s+/, $invoices ) if $invoices ; @@ -100,41 +99,24 @@ my %avoid_numbers ; #print "@invoices\n" ; +my @actions ; + foreach my $file ( @files ) { - my @actions = parse_file( $file ) ; - - foreach my $action (@actions) { - my %action = %$action ; - #print $action->{ Nom }, "\n" ; - my( $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat, - $Devise, $Montant, $Numero_davis_de_reception, $Solde, - $Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe, $Titre_de_l_objet, $Nom_Option_2, $Option_2_Valeur, - $Impact_sur_le_solde ) - = @action{ ( 'Date', 'Heure', 'Fuseau horaire', 'Nom', 'Type', 'Etat', - 'Devise', 'Montant', "Numéro d'avis de réception", 'Solde', - 'Pays', 'Nom Option 1', 'Valeur Option 1', 'Hors taxe', "Titre de l'objet", 'Nom Option 2', 'Option 2 Valeur', - 'Impact sur le solde') } ; - #print "[$Option_2_Valeur] [$Impact_sur_le_solde]\n" ; - #next; - ( $Etat ) = @action{ ( 'Etat' ) } || @action{ ( 'État' ) } ; - ( $Hors_taxe ) = @action{ ( 'Hors taxe' ) } || @action{ ( 'Avant commission' ) } ; - $Impact_sur_le_solde ||= '' ; - - my $invoice = 'NONE' ; - $Montant = $action->{ 'Net' } if not defined $Montant; - # compute_line() adds $action->{ 'invoice' } if needed - compute_line( $action, $invoice, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat, - $Devise, $Montant, $Numero_davis_de_reception, $Solde, - $Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe, $Titre_de_l_objet, - $Impact_sur_le_solde ) ; - - # index by invoice number - $action_of_invoice{ $action->{ 'invoice' } } = $action ; - } - delete $action_of_invoice{ 'NONE' } ; + my @actions_file = parse_file( $file ) ; + push( @actions, @actions_file ) ; } +foreach my $action (@actions) { + # compute_line() adds $action->{ 'invoice' } if needed + compute_line( $action ) ; + + # index by invoice number + $action_invoice{ $action->{ 'invoice' } } = $action ; +} +delete $action_invoice{ 'NONE' } ; + + my $last_invoice ; my @invoice_paypal = sort { $a <=> $b } keys %invoice_paypal ; $last_invoice = $invoice_paypal[-1] || 0 ; @@ -149,7 +131,7 @@ my %invoice_not_sent ; foreach my $invoice ( @invoices_wanted ) { - my $action = $action_of_invoice{ $invoice } ; + my $action = $action_invoice{ $invoice } ; next if ! $action ; my $email_address = $action->{ "De l'adresse email" } ; @@ -158,7 +140,7 @@ foreach my $invoice ( @invoices_wanted ) { if ( $invoice_sent ) { $invoice_sent{ $invoice }++ ; - #build_invoice( $invoice ) ; + build_invoice( $invoice ) if ( $debug_invoice or $debug_invoice_utf8 ) ; }elsif( not ( $invoice_canceled{ $invoice } or $invoice_refund{ $invoice } ) ) { $invoice_not_sent{ $invoice }++ ; build_invoice( $invoice ) ; @@ -385,18 +367,38 @@ sub tests_exportbnc { } + + sub tests { tests_next_invoice( ) ; - #tests_half( ) ; tests_cut( ) ; tests_invoice_00000( ) ; - tests_exportbnc( ) ; + #tests_exportbnc( ) ; + tests_tva_rate( ) ; } sub compute_line { - my( $action, $invoice, $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat, - $Devise, $Montant, $Numero_davis_de_reception, $Solde, - $Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe_paypal, $Titre_de_l_objet, $Impact_sur_le_solde ) = @_ ; + + my $action = shift ; + my %action = %$action ; + + my( $Date, $Heure, $Fuseau_horaire, $Nom, $Type, $Etat, + $Devise, $Montant, $Numero_davis_de_reception, $Solde, + $Pays, $Nom_Option_1, $Valeur_Option_1, $Hors_taxe_paypal, $Titre_de_l_objet, $Nom_Option_2, $Option_2_Valeur, + $Impact_sur_le_solde ) + = @action{ ( 'Date', 'Heure', 'Fuseau horaire', 'Nom', 'Type', 'Etat', + 'Devise', 'Montant', "Numéro d'avis de réception", 'Solde', + 'Pays', 'Nom Option 1', 'Valeur Option 1', 'Hors taxe', "Titre de l'objet", 'Nom Option 2', 'Option 2 Valeur', + 'Impact sur le solde') } ; + #print "[$Option_2_Valeur] [$Impact_sur_le_solde]\n" ; + #next; + ( $Etat ) = @action{ ( 'Etat' ) } || @action{ ( 'État' ) } ; + ( $Hors_taxe_paypal ) = @action{ ( 'Hors taxe' ) } || @action{ ( 'Avant commission' ) } ; + $Impact_sur_le_solde ||= '' ; + + my $invoice = 'NONE' ; + $Montant = $action->{ 'Net' } if not defined $Montant; + $debug and print( "#" x 78, "\n", "[$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] ", @@ -437,7 +439,7 @@ sub compute_line { $total_HT_EUR_exo += $montant_HT_EUR_exo ; $total_HT_EUR_ass += $montant_HT_EUR_ass ; $total_TVA_EUR += $montant_TVA_EUR ; - #$invoice = $first_invoice + $nb_invoice ; + $invoice = next_invoice( ) ; $nb_invoice++ ; $print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde] [$Impact_sur_le_solde]\n" ) ; @@ -465,8 +467,6 @@ sub compute_line { $total_TVA_EUR_sup += $montant_TVA_EUR_sup ; $total_HT_EUR_sup_exo += $montant_HT_EUR_sup_exo ; - - #$invoice = $first_invoice + $nb_invoice ; $invoice = next_invoice( ) ; $nb_invoice++ ; $print_details and print ( "[$invoice] [$Date] [$Heure] [$Fuseau_horaire] [$Nom] [$Type] [$Etat] [$Devise] [$Montant] [$Numero_davis_de_reception] [$Solde] [$Impact_sur_le_solde]\n" ) ; @@ -576,7 +576,7 @@ sub build_invoice { return if ! $invoice ; - my $action = $action_of_invoice{ $invoice } ; + my $action = $action_invoice{ $invoice } ; my $refund = '' ; $refund = 'REFUND ' if $invoice_refund{ $invoice } ; my %action = %$action if $action ; @@ -677,7 +677,7 @@ sub build_invoice { $priceTTCusd, $HTorTTC ) - = tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet ) ; + = tva_stuff( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet, $Date ) ; my $object_type = object_type( $Titre_de_l_objet ) ; @@ -813,6 +813,9 @@ Hello $name, First of all, I'm sorry for the delay in getting back to you. +Last imapsync release is available from the page +http://imapsync.lamiral.info/paypal_return.shtml + You'll find in the attachment the invoice of imapsync software you bought and paid (dd/mm/yyyy $date). The invoice file is named facture_imapsync-${invoice}.pdf @@ -851,6 +854,9 @@ Hello $name, First of all, I'm sorry for the delay in getting back to you. +Last imapsync release is available from the page +http://imapsync.lamiral.info/paypal_return.shtml + You'll find in the attachment the invoice of imapsync support you bought and paid (dd/mm/yyyy $date). The invoice file is named facture_imapsync-${invoice}.pdf @@ -1052,6 +1058,34 @@ sub date_aaaa_mm_jj { } +sub tva_rate { + my $date_aaaa_mm_jj = shift ; + + if ( '2014_01_01' gt $date_aaaa_mm_jj ) { + #print "tva_rate 0.196\n" ; + #return( 0 ) ; + return( 0.196 ) ; + } + + if ( '2014_01_01' le $date_aaaa_mm_jj ) { + #print "tva_rate 0.2\n" ; + return( 0.2 ) ; + } + #print "tva_rate 0\n" ; + return( 0 ) ; +} + +sub tests_tva_rate { + ok( 0.196 == tva_rate( '2013_01_01' ), 'tva_rate: old 0.196' ) ; + ok( 0.196 == tva_rate( '2013_12_31' ), 'tva_rate: old 0.196' ) ; + ok( 0.2 == tva_rate( '2014_01_01' ), 'tva_rate: new 0.2' ) ; + ok( 0.2 == tva_rate( '2014_12_31' ), 'tva_rate: new 0.2' ) ; + ok( 0.2 == tva_rate( '2050_01_01' ), 'tva_rate: new 0.2' ) ; + ok( 0.2 == tva_rate( '2050_12_31' ), 'tva_rate: new 0.2' ) ; + return( 0 ) ; +} + + sub tva_line { my( $Devise, $Montant2, $Pays, $Nom_Option_1, $Valeur_Option_1, $Titre_de_l_objet, $Date ) = @_ ; my( $montant_HT_EUR_exo, $montant_HT_EUR_ass, $montant_TVA_EUR ) = ( 0, 0, 0 ) ; @@ -1074,8 +1108,8 @@ sub tva_line { or ( 'France' eq $Pays ) ) { - $montant_HT_EUR_ass = $Montant2 / 1.196 ; - $montant_TVA_EUR = $Montant2 / 1.196 * 0.196 ; + $montant_HT_EUR_ass = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ; + $montant_TVA_EUR = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ; $debug_dev and print "$Montant2 $Pays $Valeur_Option_1\n" ; }else{ $montant_HT_EUR_exo = $Montant2 ; @@ -1090,8 +1124,8 @@ sub tva_line { or ( '2013_02_19' gt $date_aaaa_mm_jj ) ) { - $montant_HT_EUR_sup = $Montant2 / 1.196 ; - $montant_TVA_EUR_sup = $Montant2 / 1.196 * 0.196 ; + $montant_HT_EUR_sup = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ; + $montant_TVA_EUR_sup = $Montant2 / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ; }else{ $montant_HT_EUR_sup_exo = $Montant2 ; } @@ -1103,10 +1137,12 @@ sub tva_line { sub tva_stuff { - my( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet ) = @_ ; + my( $clientTypeEN, $Pays, $Hors_taxe, $Devise, $Titre_de_l_objet, $Date ) = @_ ; my $priceTTCusd = '' ; $Hors_taxe =~ s{,}{.} ; + + my $date_aaaa_mm_jj = date_aaaa_mm_jj( $Date ) ; if ( $Devise eq 'USD' ) { $priceTTCusd = "(usd $Hors_taxe)" ; @@ -1128,10 +1164,10 @@ sub tva_stuff { or ( 'France' eq $Pays ) ) { - $priceHT = sprintf('%2.2f', $Hors_taxe/1.196) ; + $priceHT = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) ) ; $tvaFR = '19,60\%'; $tvaEN = ''; - $priceTVA = sprintf('%2.2f', $Hors_taxe/1.196*0.196) ; + $priceTVA = sprintf('%2.2f', $Hors_taxe / ( 1 + tva_rate( $date_aaaa_mm_jj ) ) * tva_rate( $date_aaaa_mm_jj ) ) ; $priceTTC = sprintf('%2.2f', $Hors_taxe) ; $HTorTTC = 'TTC' ; $messageTVAFR = '' ; @@ -1240,19 +1276,6 @@ $addr = " } -sub half { - my $string = shift ; - my $half = int( lenght( $string ) / 2 ) ; - # TO BE DONE - -} - -sub tests_half { - my( $aa, $bb ) = half( 'aa bb' ) ; - ok( 'aa' eq $aa, 'half: aa' ) ; - ok( 'bb' eq $bb, 'half: bb' ) ; -} - sub cut { my $string = shift ; my $offset = shift ; diff --git a/W/paypal_reply/paypal_build_invoices b/W/paypal_reply/paypal_build_invoices index 09a4a8e..2815765 100755 --- a/W/paypal_reply/paypal_build_invoices +++ b/W/paypal_reply/paypal_build_invoices @@ -1,6 +1,6 @@ #!/bin/sh -# $Id: paypal_build_invoices,v 1.60 2013/12/14 17:30:04 gilles Exp gilles $ +# $Id: paypal_build_invoices,v 1.63 2014/01/18 01:26:53 gilles Exp gilles $ # usage: sh paypal_build_invoices /g/var/paypal_invoices/???? @@ -44,7 +44,9 @@ cp /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.tex /g/var/pa #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2820 /g/paypal/paypal_2013_09_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2891 /g/paypal/paypal_2013_10_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 2973 /g/paypal/paypal_2013_11_complet.csv -/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3040 /g/paypal/paypal_2013_12_complet.csv +#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3040 /g/paypal/paypal_2013_12_complet.csv + +/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3094 /g/paypal/paypal_2014_01_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 147 /g/paypal/paypal_2010_11_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 214 /g/paypal/paypal_2010_12_complet.csv @@ -82,22 +84,26 @@ cp /home/gilles/public_html/AGIL/factures/000/facture_imapsync-000.tex /g/var/pa : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2741 /g/paypal/paypal_2013_08_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2820 /g/paypal/paypal_2013_09_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2891 /g/paypal/paypal_2013_10_complet.csv - -set -x : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 2973 /g/paypal/paypal_2013_11_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3040 /g/paypal/paypal_2013_12_complet.csv +set -x +: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3094 /g/paypal/paypal_2014_01_complet.csv set +x # La totale : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \ - --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 2625 2626 2970 2971 2972' \ + --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 +1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 +2625 2626 2970 2971 2972 3093' \ /g/paypal/paypal_201?_??_complet.csv set -v : /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ - --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 2625 2626 2970 2971 2972' \ + --first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 +1330 1331 1332 1333 1334 1652 1653 2131 2132 2295 2296 2297 2298 +2625 2626 2970 2971 2972 3093' \ /g/paypal/paypal_201?_??_complet.csv set +v diff --git a/examples/imapsync_example.sh b/examples/imapsync_example.sh new file mode 100644 index 0000000..ada9cc3 --- /dev/null +++ b/examples/imapsync_example.sh @@ -0,0 +1,10 @@ +#!/bin/sh + +# imapsync example shell for Unix users +# lines beginning with # are just comments + +# Replace imap.foo.org toto secretoto 192.168.42.4 titi secretiti with your own values + +./imapsync --host1 imap.foo.org --user1 toto --password1 "secretoto" \ + --host2 192.168.42.4 --user2 titi --password2 "secretiti" + diff --git a/imapsync b/imapsync index 23e17ac..e4eb922 100755 --- a/imapsync +++ b/imapsync @@ -22,7 +22,7 @@ Synchronises mailboxes between two imap servers. Good at IMAP migration. More than 52 different IMAP server softwares supported with success, few failures. -$Revision: 1.580 $ +$Revision: 1.584 $ =head1 SYNOPSIS @@ -433,7 +433,8 @@ Success stories reported with the following 57 imap servers - Samsung Contact IMAP server 8.5.0 - Scalix v10.1, 10.0.1.3, 11.0.0.431, 11.4.6 - Sendmail Mail Store IMAP4rev1 (5.5.6/mstore-5-5-build-1874 [host1]. - - SmarterMail, Smarter Mail 5.0 Enterprise, Smarter Mail 5.5 [host1], SmarterMail Professional 10.2 [host1]. + - SmarterMail, Smarter Mail 5.0 Enterprise, Smarter Mail 5.5 [host1], + SmarterMail Professional 10.2 [host1], Smarter Mail 11.7 [host1][host2]. - Softalk Workgroup Mail 7.6.4 [host1]. - SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System) - Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05, 6.3 @@ -541,7 +542,7 @@ Entries for imapsync: Feedback (good or bad) will often be welcome. -$Id: imapsync,v 1.580 2013/12/25 02:52:36 gilles Exp gilles $ +$Id: imapsync,v 1.584 2014/02/05 00:40:59 gilles Exp gilles $ =cut @@ -581,7 +582,7 @@ use IPC::Open3 'open3' ; my( $rcs, $pidfile, $pidfilelocking, $debug, $debugimap, $debugimap1, $debugimap2, $debugcontent, $debugflags, - $debugLIST, $debugsleep, $debugdev, $debugmemory, + $debugLIST, $debugsleep, $debugdev, $debugmemory, $debugmaxlinelength, $nb_errors, $host1, $host2, $port1, $port2, $user1, $user2, $domain1, $domain2, @@ -664,6 +665,7 @@ my( $messageidnodomain, $fixInboxINBOX, $maxlinelength, + $minmaxlinelength, $uidnext_default, $fixcolonbug, $create_folder_old, @@ -676,7 +678,7 @@ my( # global variables initialisation -$rcs = '$Id: imapsync,v 1.580 2013/12/25 02:52:36 gilles Exp gilles $ '; +$rcs = '$Id: imapsync,v 1.584 2014/02/05 00:40:59 gilles Exp gilles $ '; $total_bytes_transferred = 0; $total_bytes_skipped = 0; @@ -1029,8 +1031,11 @@ print "Host1 capability: ", join(" ", @{ $imap1->capability_update() || [] }), " print "Host2 capability: ", join(" ", @{ $imap2->capability_update() || [] }), "\n"; -exit_clean(0) if ($justlogin); - +if ( $justlogin ) { + $imap1->logout( ) ; + $imap2->logout( ) ; + exit_clean( 0 ) ; +} # # Folder stuff # @@ -1130,17 +1135,17 @@ $checkselectable and do { my($h1_sep,$h2_sep); # what are the private folders separators for each server ? -$debug and print "Getting separators\n"; -$h1_sep = get_separator($imap1, $sep1, "--sep1"); -$h2_sep = get_separator($imap2, $sep2, "--sep2"); +$debug and print "Getting separators\n" ; +$h1_sep = get_separator( $imap1, $sep1, "--sep1", "Host1" ) ; +$h2_sep = get_separator( $imap2, $sep2, "--sep2", "Host2" ) ; -my($h1_prefix,$h2_prefix); -$h1_prefix = get_prefix($imap1, $prefix1, "--prefix1"); -$h2_prefix = get_prefix($imap2, $prefix2, "--prefix2"); +my( $h1_prefix, $h2_prefix ) ; +$h1_prefix = get_prefix( $imap1, $prefix1, "--prefix1", "Host1" ) ; +$h2_prefix = get_prefix( $imap2, $prefix2, "--prefix2", "Host2" ) ; -print "Host1 separator and prefix: [$h1_sep][$h1_prefix]\n"; -print "Host2 separator and prefix: [$h2_sep][$h2_prefix]\n"; +print "Host1 separator and prefix: [$h1_sep][$h1_prefix]\n" ; +print "Host2 separator and prefix: [$h2_sep][$h2_prefix]\n" ; #my $h1_xlist_folders = $imap1->xlist_folders( ) ; #my $h2_xlist_folders = $imap2->xlist_folders( ) ; @@ -1991,11 +1996,14 @@ sub connect_imap { $imap->Debug($mydebugimap); $imap->connect() or die_clean("Can not open imap connection on [$host]: $@\n"); - #myconnect($imap) - # or die_clean("Can not open imap connection on [$host]: $@\n"); + my $banner = $imap->Results()->[0] ; $imap->Banner( $banner ) ; - $imap->starttls( ) if ( $imap->Tls( ) ) ; + + if ( $imap->Tls( ) ) { + $imap->starttls( ) + or die_clean("Can not go to tls encryption on [$host]:", $imap->LastError, "\n" ) ; + } return( $imap ) ; } @@ -2083,7 +2091,10 @@ sub login_imap { } } - $imap->starttls( ) if ( $imap->Tls( ) ) ; + if ( $imap->Tls( ) ) { + $imap->starttls( ) + or die_clean("Can not go to tls encryption on [$host]:", $imap->LastError, "\n" ) ; + } authenticate_imap( $imap, @allargs ) ; @@ -2173,12 +2184,13 @@ sub set_ssl { # $SSL_version = $SSL_version || '' ; #print "[$SSL_version]\n" ; - IO::Socket::SSL::set_ctx_defaults( + + my $sslargs = [ SSL_verify_mode => 'SSL_VERIFY_PEER', SSL_verifycn_scheme => 'imap', SSL_version => $SSL_version, - ) ; - $imap->Ssl( $ssl ) ; + ] ; + $imap->Ssl( $sslargs ) ; return( ) ; } @@ -2307,8 +2319,8 @@ sub banner_imapsync { my @argv = @_ ; my $banner_imapsync = join("", '$RCSfile: imapsync,v $ ', - '$Revision: 1.580 $ ', - '$Date: 2013/12/25 02:52:36 $ ', + '$Revision: 1.584 $ ', + '$Date: 2014/02/05 00:40:59 $ ', "\n",localhost_info(), "\n", "Command line used:\n", "$0 ", command_line_nopassword( @argv ), "\n", @@ -2680,59 +2692,86 @@ sub tests_compare_lists { -sub get_prefix { - my( $imap, $prefix_in, $prefix_opt ) = @_ ; +sub get_prefix { + my( $imap, $prefix_in, $prefix_opt, $Side ) = @_ ; my( $prefix_out ) ; - $debug and print "Getting prefix namespace\n" ; - if ( defined( $prefix_in ) ) { - print "Using [$prefix_in] given by $prefix_opt\n" ; - $prefix_out = $prefix_in ; - return( $prefix_out ) ; - } - $debug and print "Calling namespace capability\n" ; + $debug and print "$Side: Getting prefix\n" ; + + $debug and print "$Side: Calling namespace capability\n" ; if ( $imap->has_capability( "namespace" ) ) { my $r_namespace = $imap->namespace( ) ; $prefix_out = $r_namespace->[0][0][0] ; - return($prefix_out) ; + print "$Side: prefix given by NAMESPACE: [$prefix_out]\n" ; + if ( defined( $prefix_in ) ) { + print "$Side: but using [$prefix_in] given by $prefix_opt\n" ; + $prefix_out = $prefix_in ; + return( $prefix_out ) ; + }else{ + # all good + return( $prefix_out ) ; + } } else{ - print - "No NAMESPACE capability in imap server ", - $imap->Server( ),"\n", - help_to_guess_prefix( $imap, $prefix_opt ) ; - exit_clean( 1 ) ; + if ( defined( $prefix_in ) ) { + print "$Side: using [$prefix_in] given by $prefix_opt\n" ; + $prefix_out = $prefix_in ; + return( $prefix_out ) ; + }else{ + print + "$Side: No NAMESPACE capability in imap server ", + $imap->Server( ),"\n", + help_to_guess_prefix( $imap, $prefix_opt ) ; + exit_clean( 1 ) ; + } } return( ) ; } -sub get_separator { - my($imap, $sep_in, $sep_opt) = @_; - my($sep_out); +sub get_separator { + my( $imap, $sep_in, $sep_opt, $Side ) = @_ ; + my( $sep_out ) ; - if ( defined( $sep_in ) ) { - print "Using [$sep_in] given by $sep_opt\n" ; - $sep_out = $sep_in ; - return( $sep_out ) ; - } - $debug and print "Calling namespace capability\n" ; - if ($imap->has_capability( "namespace" ) ) { + $debug and print "$Side: calling namespace capability\n" ; + if ( $imap->has_capability( "namespace" ) ) { $sep_out = $imap->separator( ) ; - return($sep_out) if defined $sep_out ; - print - "NAMESPACE request failed for ", - $imap->Server(), ": ", $imap->LastError, "\n", - help_to_guess_sep( $imap, $sep_opt ) ; - exit_clean( 1 ) ; + if ( defined( $sep_out ) ) { + print "$Side: separator given by NAMESPACE: [$sep_out]\n" ; + if ( defined( $sep_in ) ) { + print "$Side: but using [$sep_in] given by $sep_opt\n" ; + $sep_out = $sep_in ; + return( $sep_out ) ; + }else{ + return( $sep_out ) ; + } + }else{ + if ( defined( $sep_in ) ) { + print "$Side: NAMESPACE request failed but using [$sep_in] given by $sep_opt\n" ; + $sep_out = $sep_in ; + return( $sep_out ) ; + }else{ + print + "$Side: NAMESPACE request failed for ", + $imap->Server(), ": ", $imap->LastError, "\n", + help_to_guess_sep( $imap, $sep_opt ) ; + exit_clean( 1 ) ; + } + } } else{ - print - "No NAMESPACE capability in imap server ", - $imap->Server(),"\n", - help_to_guess_sep( $imap, $sep_opt ) ; - exit_clean( 1 ) ; + if ( defined( $sep_in ) ) { + print "$Side: No NAMESPACE capability but using [$sep_in] given by $sep_opt\n" ; + $sep_out = $sep_in ; + return( $sep_out ) ; + }else{ + print + "$Side: No NAMESPACE capability in imap server ", + $imap->Server(),"\n", + help_to_guess_sep( $imap, $sep_opt ) ; + exit_clean( 1 ) ; + } } return( ) ; } @@ -2941,7 +2980,8 @@ sub foldersizes { $nb_errors++ ; next ; } - + last if $imap->IsUnconnected() ; + my $hash_ref = { } ; my @msgs = select_msgs( $imap, undef, $search_cmd, $folder ) ; $nb_msgs = scalar( @msgs ) ; @@ -3474,6 +3514,8 @@ sub copy_message { if ( size_filtered( $h1_size, $h1_msg, $h1_fold, $h2_fold ) ) { + $total_bytes_skipped += $h1_size; + $nb_msg_skipped += 1; $h1_nb_msg_processed +=1 ; return( ) ; } @@ -3483,6 +3525,8 @@ sub copy_message { if ( $checkmessageexists and not message_exists( $imap1, $h1_msg ) ) { + $total_bytes_skipped += $h1_size; + $nb_msg_skipped += 1; $h1_nb_msg_processed +=1 ; return( ) ; } @@ -3492,17 +3536,34 @@ sub copy_message { if ( not defined( $string ) and not defined( $string_len ) ) { print "- msg $h1_fold/$h1_msg skipped. Could not be fetched\n" ; + $total_bytes_skipped += $h1_size; + $nb_msg_skipped += 1; + $h1_nb_msg_processed +=1 ; return( ) ; } # Lines two long => do no copy - if ( ( defined ( $maxlinelength ) ) - and ( max_line_length( $string ) > $maxlinelength ) ) { - my $subject = subject( $string ) ; - #print "[$subject]\n" ; - print "- msg $h1_fold/$h1_msg skipped S[$h1_size] F[$h1_flags] I[$h1_idate] " - . "(Subject:[$subject]) (line length exceeds maxlinelength $maxlinelength bytes)\n" ; - return( ) ; + if ( defined ( $maxlinelength ) or defined ( $minmaxlinelength ) ) { + my $maxlinelength_string = max_line_length( $string ) ; + $debugmaxlinelength and print "msg $h1_fold/$h1_msg maxlinelength: $maxlinelength_string\n" ; + if ( defined ( $maxlinelength ) and ( $maxlinelength_string > $maxlinelength ) ) { + my $subject = subject( $string ) ; + print "- msg $h1_fold/$h1_msg skipped S[$h1_size] F[$h1_flags] I[$h1_idate] " + . "(Subject:[$subject]) (line length exceeds maxlinelength $maxlinelength bytes)\n" ; + $h1_nb_msg_processed +=1 ; + $total_bytes_skipped += $h1_size; + $nb_msg_skipped += 1; + return( ) ; + } + if ( defined ( $minmaxlinelength ) and ( $maxlinelength_string <= $minmaxlinelength ) ) { + my $subject = subject( $string ) ; + $debugdev and print "- msg $h1_fold/$h1_msg skipped S[$h1_size] F[$h1_flags] I[$h1_idate] " + . "(Subject:[$subject]) (max line length under minmaxlinelength $minmaxlinelength bytes)\n" ; + $h1_nb_msg_processed +=1 ; + $total_bytes_skipped += $h1_size; + $nb_msg_skipped += 1; + return( ) ; + } } my $h1_date = date_for_host2( $h1_msg, $h1_idate ) ; @@ -3530,6 +3591,8 @@ sub copy_message { return( $new_id ) ; } + + sub message_for_host2 { my ( $h1_msg, $h1_fold, $h1_size, $h1_flags, $h1_idate, $h1_fir_ref ) = @_ ; @@ -4945,7 +5008,7 @@ sub check_last_release { } sub imapsync_version { - my $rcs_imapsync = '$Id: imapsync,v 1.580 2013/12/25 02:52:36 gilles Exp gilles $ ' ; + my $rcs_imapsync = '$Id: imapsync,v 1.584 2014/02/05 00:40:59 gilles Exp gilles $ ' ; my $imapsync_version ; if ( $rcs_imapsync =~ m{,v\s+(\d+\.\d+)}xo ) { @@ -5846,7 +5909,7 @@ Several options are mandatory. --exitwhenover : Stop syncing when total bytes transferred reached. Gmail per day allows 2500000000 down 500000000 upload. ---maxlinelength : skip messages with line length longer than bytes. +--maxlinelength : skip messages with a line length longer than bytes. RFC 2822 says it must be no more than 1000 bytes. --useheader : Use this header to compare messages on both sides. @@ -5958,6 +6021,7 @@ sub get_options { "debugimap2!" => \$debugimap2, "debugdev!" => \$debugdev, "debugmemory!" => \$debugmemory, + "debugmaxlinelength!" => \$debugmaxlinelength, "host1=s" => \$host1, "host2=s" => \$host2, "port1=i" => \$port1, @@ -6075,6 +6139,7 @@ sub get_options { "abletosearch!" => \$abletosearch, "showpasswords!" => \$showpasswords, "maxlinelength=i" => \$maxlinelength, + "minmaxlinelength=i" => \$minmaxlinelength, "fixcolonbug!" => \$fixcolonbug, "create_folder_old!" => \$create_folder_old, "maxmessagespersecond=f" => \$maxmessagespersecond, diff --git a/imapsync_by_country.txt b/imapsync_by_country.txt new file mode 100644 index 0000000..0847009 --- /dev/null +++ b/imapsync_by_country.txt @@ -0,0 +1,67 @@ + 832 Etats-Unis d'Amérique + 527 Allemagne + 263 Royaume-Uni + 145 Canada + 143 France + 137 Italie + 118 Suisse + 101 Australie + 83 Pays-Bas + 57 Autriche + 53 Belgique + 48 Suède + 48 Espagne + 36 Danemark + 28 Brésil + 27 Norvège + 27 Finlande + 22 Japon + 15 République tchèque + 14 Russie + 14 Nouvelle-Zélande + 14 Irlande + 14 + 12 Portugal + 12 Pologne + 12 Hong-Kong + 10 Inde + 10 Hongrie + 10 Argentine + 9 Singapour + 9 Luxembourg + 9 Chine + 9 Afrique du Sud + 8 Grèce + 7 Slovaquie + 7 Mexique + 7 Malaisie + 7 Israel + 6 Slovénie + 6 Chili + 5 Lettonie + 4 Islande + 4 Indonésie + 4 Emirats Arabes Unis + 3 Venezuela + 3 Turquie + 3 Thaïlande + 3 Roumanie + 3 Philippines + 3 Malte + 3 Croatie + 2 Uruguay + 2 Estonie + 2 Egypte + 2 Costa Rica + 2 Chypre + 1 Vietnam + 1 Ukraine + 1 Taiwan + 1 Qatar + 1 Panama + 1 Namibie + 1 Maldives + 1 Lituanie + 1 Koweït + 1 Colombie + 1 Bahreïn diff --git a/index.shtml b/index.shtml index 5f64f6e..ef70255 100644 --- a/index.shtml +++ b/index.shtml @@ -5,7 +5,7 @@ Official imapsync migration tool ( release <!--#exec cmd="cat ./VERSION"--> ) - + @@ -81,33 +81,36 @@ for bidirectionnal (2 ways) synchronizations.

Alternatives to imapsync are listed in the Similar softwares section.

-

Imapsync used to be free, open and gratis, before november 2010. +

Imapsync used to be free, open and gratis, that was before november 2010. Now imapsync is free, open and not gratis from the homepage. -It is the best decision I've done about imapsync to continue to maintain it. +Imapsync is still under the NOLIMIT license, +claiming no limit to do anything with this work and this license, +so one of the most open license of the universe. + +It is the best decisions I've made about imapsync to continue to maintain it. See detailed explanation and motivation here when I looked for a business model. "Download and donate if happy" doesn't work well. -"Pay for download and I pay back if unhappy" works well. +"Pay for download and I pay back if unhappy" works well, a 100 times better.

-

Facts and figures for 2011-2013

+

Facts and figures for 2011-2014

    -
  • 4000 to 5000 users per month (45000 users a year)
  • +
  • 4000 to 5000 users per month (48000 users a year).
  • +
  • 6 to 25 millions mailboxes transfers per month.
  • +
  • 158 millions transfers for 2013, that is five whole mailboxes synced per second.
  • -
  • 6 to 25 millions mailboxes transfers per month, -total is 93 millions for 2011, 91 millions for 2012, should be 140 millions for end 2013
  • - -
  • Operating systems run by imapsync users: +
  • Operating systems run by imapsync users (in 2013):
      -
    • Linux: 72%
    • -
    • Win32: 13%
    • +
    • Linux: 70%
    • +
    • Win32: 14%
    • Darwin: 6%
    • -
    • FreeBSD: 8%
    • -
    • Solaris: 0.2%
    • +
    • FreeBSD: 10%
    • +
    • Solaris: 0.15%
    • OpenBSD: 0.02%
    • -
    • Other: 0.6%
    • +
    • Other: 0.46%
  • Highest use rate: about 21 millions of IMAP mailbox transfers (in a single month)
  • @@ -115,8 +118,8 @@ total is 93 millions for 2011, 91 millions for 2012, should be 140 millions f

    Where all those numbers come from? -To know wether a newer imapsync exists or not imapsync does a http GET to VERSION. -Via the User-agent parameter it also send:

    +To know wether a newer imapsync exists or not imapsync does a http GET to the file VERSION. +Via the User-agent parameter it also sends:

    • imapsync release
    • @@ -145,7 +148,7 @@ Via the User-agent parameter it also send:

        -
      • 1.580
      • -
      • Enhancement: Added --maxmessagespersecond to limit messages tranfer rate and fix office365 throttle limitation (use --maxmessagespersecond 4).
      • -
      • Enhancement: Added --maxbytespersecond to limit byte transfer rate.
      • -
      • Enhancement: Added --folderfirst string: Sync this folder first. --folderfirst "Work" --folderfirst "Friends"
      • -
      • Enhancement: Added --folderlast string: Sync this folder last. --folderlast "[Gmail]/All Mail" etc.
      • -
      • Enhancement: Added --skipcrossduplicates to avoid copying messages that are already copied in another folder, good from Gmail to X.
      • -
      • Enhancement: Added --debugcrossduplicates to print which messages (UIDs) are skipped with --skipcrossduplicates (and in what other folders they are).
      • -
      • Enhancement: Added --debugmemory option that prints memory consumption after each message is copied.
      • -
      • Bug fix: Create nested folders in the sense of their path, parent first. Thanks to Erik Torsner.
      • -
      • Bug fix: Final statistics were avoided for newly created folders.
      • -
      • Bug fix: Do not try to append message if the fetch failed.
      • -
      - -
        -
      • 1.569 Win32 --tmpdir "C:" bugfix
      • -
      • Bug fix: On Win32 trailing blanc in cache dir name raized an error. Blanc is now moved to underscore _
      • -
      • Bug fix: Fixed bug on Windows with for example --tmpdir "E:\TEMP". The colon was badly converted to _, ending with --tmpdir "E_\TEMP". -This fix also automatically moves the old cache to the new one if the new does not exist yet.
      • -
      - -
        -
      • 1.567 imapsync.exe crash fix
      • -
      • Enhancement: Added --authmech EXTERNAL.
      • -
      • Bug fix: Fixed a warning when RFC822.SIZE is null or undef.
      • -
      • Bug fix: Fixed imapsync.exe crash with no error message when it exits on a error. Back to Perl 5.16
      • +
      • 1.584
      • +
      • Enhancement: Added --minmaxlinelength to select messages with long lines only. + It helps to diagnostic Echange error on messages with lines longer than 9000 characters
      • +
      • Enhancement: Added --debugmaxlinelength
      • +
      • Bug fix: --ssl1 --tls2 was buggy because of default SSL_VERIFY_PEER. + "Can not go to tls encryption on [localhost]:Unable to start TLS: Cannot determine peer hostname for verification..."
      • +
      • Bug fix: Check if going to tls is ok, exit otherwise with explicit error message. +Thanks to Dennis Schridde for reporting this ugly bug that deserves a CVE.
      • +
      • Debug: Print separator given by NAMESPACE even when --sep1 oe --sep2 is used.
      • +
      • Debug: Prints prefix given by NAMESPACE even when --prefix1 or --prefix2 is used. +It is a preparation for advising not to use --prefix unless suggested.
      -

      Good changed made before, listed because they can help: +

      Good changes made before, listed because they can help:

        +
      • Enhancement: Added --skipcrossduplicates to avoid copying messages that are already copied in another folder, good from Gmail to X.
      • +
      • Enhancement: Added --debugcrossduplicates to print which messages (UIDs) are skipped with --skipcrossduplicates (and in what other folders they are).
      • +
      • Enhancement: Added --folderfirst string: sync this folder first. --folderfirst "Work" --folderfirst "Friends"
      • +
      • Enhancement: Added --folderlast string: sync this folder last. --folderlast "[Gmail]/All Mail" etc.
      • +
      • Enhancement: Added --maxmessagespersecond to limit messages tranfer rate and fix Office365 throttle limitation (use --maxmessagespersecond 4).
      • +
      • Enhancement: Added --maxbytespersecond to limit byte transfer rate.
      • +
      • Enhancement: Added --debugmemory option that prints memory consumption after each message is copied.
      • + +
      • Enhancement: Added --authmech EXTERNAL.
      • Enhancement: Adapted behavior for allowing --maxdate --mindate with --noabletosearch. Use internat date instead of Date: header.
      • @@ -299,13 +297,6 @@ by ignoring PERMANENTFLAGS (Exchange tests)
      - -

      Simple transfer on Windows

      @@ -346,6 +337,31 @@ example. + + +

      Buy imapsync source code

      Buy latest imapsync Perl source code for 50 EUR @@ -391,7 +407,7 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>

      -

      You will receive a download link just after the payment from gilles.lamiral@laposte.net (can fall in Spam folder sometimes).
      +

      You will receive a download link just after the payment from gilles.lamiral@laposte.net (can fall in Spam folder sometimes).
      You will also receive a gpg signed invoice within a few days by email.
      Please give a delivery postal address where the invoice will be needed (your company for example), since reedit is not easy (and forbidden by law). @@ -440,7 +456,7 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>

      -

      You will receive a download link just after the payment, from gilles.lamiral@laposte.net (can fall in Spam folder sometimes).
      +

      You will receive a download link just after the payment, from gilles.lamiral@laposte.net (can fall in Spam folder sometimes).
      You will also receive a gpg signed invoice within a few days by email.
      Please give a delivery postal address where the invoice will be needed (your company for example), since reedit is not easy (and forbidden by law). @@ -449,7 +465,7 @@ Please give a delivery postal address where the invoice will be needed @@ -496,7 +512,7 @@ It's 2 letters followed by 11 digits, for example mine is FR74429303332.

      -

      You will receive instructions to contact me just after the payment, from gilles.lamiral@laposte.net (can fall in Spam folder sometimes).
      +

      You will receive instructions to contact me just after the payment, from gilles.lamiral@laposte.net (can fall in Spam folder sometimes).
      You will also receive a gpg signed invoice within a few days by email.
      Please give a delivery postal address where the invoice will be needed (your company for example), since reedit is not easy (and forbidden by law). @@ -622,7 +638,7 @@ I like it. (http://www.communigate.com/)

    • Courier IMAP 1.5.1, 2.2.0, 2.1.1, 2.2.1, 3.0.8, 3.0.3, 4.1.1 (GPL) (http://www.courier-mta.org/imap/)
    • -
    • Critical Path (7.0.020) ()
    • +
    • Critical Path (7.0.020)
    • Cyrus IMAP 1.5, 1.6, 2.1, 2.1.15, 2.1.16, 2.1.18 2.2.1, 2.2.2-BETA, 2.2.3, 2.2.6, 2.2.10, 2.2.12, 2.2.13, @@ -635,7 +651,7 @@ I like it.
    • DBOX 2.41 System [host1] (http://www.dbox.handshake.de/).
    • Deerfield VisNetic MailServer 5.8.6 [host1] (http://www.deerfield.net/products/visnetic-mailserver/)
    • -
    • dkimap4 [host1] ()
    • +
    • dkimap4 [host1]
    • Domino (Notes) 4.61[host1], 6.5, 5.0.6, 5.0.7, 7.0.2, 6.0.2CF1, 7.0.1[host1], 8.0.1[host1] (http://www-01.ibm.com/software/lotus/products/notes/)
    • Dovecot 0.99.10.4, 0.99.14, 0.99.14-8.fc4, 1.0-0.beta2.7, @@ -684,7 +700,9 @@ I like it.
    • Samsung Contact IMAP server 8.5.0
    • Scalix v10.1, 10.0.1.3, 11.0.0.431, 11.4.6 (http://www.scalix.com/)
    • Sendmail Mail Store IMAP4rev1 (5.5.6/mstore-5-5-build-1874 [host1].
    • -
    • SmarterMail, Smarter Mail 5.0 Enterprise, Smarter Mail 5.5 [host1], SmarterMail Professional 10.2 [host1]. (http://www.smartertools.com/)
    • +
    • SmarterMail, Smarter Mail 5.0 Enterprise, Smarter Mail 5.5 [host1], SmarterMail Professional 10.2 [host1], + Smarter Mail 11.7 [host1][host2]. + (http://www.smartertools.com/)
    • Softalk Workgroup Mail 7.6.4 [host1] (http://www.softalkltd.com/products/download_wm_v7.asp).
    • SunONE Messaging server 5.2, 6.0 (SUN JES - Java Enterprise System) (http://www.oracle.com/)
    • Sun Java(tm) System Messaging Server 6.2-2.05, 6.2-7.05, 6.3 (http://www.oracle.com/)
    • @@ -720,6 +738,8 @@ I like it.
    • wonko_imapsync: http://wonko.com/article/554
    • pop2imap: http://www.linux-france.org/prj/pop2imap/
    • exchange-away: http://exchange-away.sourceforge.net/
    • +
    • SyncBackPro http://www.2brightsparks.com/syncback/sbpro.html
    • +

    Online IMAP migration services

    @@ -766,7 +786,7 @@ alt="Viewable With Any Browser" /> This document last modified on -($Id: index.shtml,v 1.189 2013/12/25 11:35:38 gilles Exp gilles $) +($Id: index.shtml,v 1.195 2014/02/13 03:17:59 gilles Exp gilles $)

    diff --git a/perlcritic_2.out b/perlcritic_2.out index d316f5d..529d87e 100644 --- a/perlcritic_2.out +++ b/perlcritic_2.out @@ -6,594 +6,591 @@ Missing "INCOMPATIBILITIES" section in POD at line 1, column 1. See pages 133,1 Missing "BUGS AND LIMITATIONS" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2) Missing "LICENSE AND COPYRIGHT" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2) Main code has high complexity score (350) at line 1, column 1. Consider refactoring. (Severity: 3) -Magic punctuation variable used at line 553, column 3. See page 79 of PBP. (Severity: 2) -64 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 720, column 10. Unnamed numeric literals make code less maintainable. (Severity: 2) -Quotes used with an empty string at line 743, column 61. See page 53 of PBP. (Severity: 2) -5 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 771, column 48. Unnamed numeric literals make code less maintainable. (Severity: 2) -5 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 772, column 48. Unnamed numeric literals make code less maintainable. (Severity: 2) -Postfix control "if" used at line 781, column 15. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 782, column 21. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 788, column 25. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 794, column 24. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 804, column 27. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 815, column 17. See pages 93,94 of PBP. (Severity: 2) -100 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 818, column 13. Unnamed numeric literals make code less maintainable. (Severity: 2) -100 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 819, column 13. Unnamed numeric literals make code less maintainable. (Severity: 2) -993 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 822, column 24. Unnamed numeric literals make code less maintainable. (Severity: 2) -143 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 822, column 30. Unnamed numeric literals make code less maintainable. (Severity: 2) -993 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 825, column 24. Unnamed numeric literals make code less maintainable. (Severity: 2) -143 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 825, column 30. Unnamed numeric literals make code less maintainable. (Severity: 2) -Postfix control "if" used at line 827, column 31. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 828, column 12. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 842, column 5. See pages 93,94 of PBP. (Severity: 2) -3 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 867, column 21. Unnamed numeric literals make code less maintainable. (Severity: 2) -Long number not separated with underscores at line 954, column 20. See page 59 of PBP. (Severity: 2) -Postfix control "unless" used at line 956, column 57. See pages 96,97 of PBP. (Severity: 2) -Quotes used with an empty string at line 983, column 19. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 984, column 50. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 986, column 22. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 987, column 22. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 991, column 26. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 998, column 49. See page 53 of PBP. (Severity: 2) -Postfix control "unless" used at line 1023, column 43. See pages 96,97 of PBP. (Severity: 2) +Magic punctuation variable used at line 554, column 3. See page 79 of PBP. (Severity: 2) +64 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 722, column 10. Unnamed numeric literals make code less maintainable. (Severity: 2) +Quotes used with an empty string at line 745, column 61. See page 53 of PBP. (Severity: 2) +5 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 773, column 48. Unnamed numeric literals make code less maintainable. (Severity: 2) +5 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 774, column 48. Unnamed numeric literals make code less maintainable. (Severity: 2) +Postfix control "if" used at line 783, column 15. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 784, column 21. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 790, column 25. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 796, column 24. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 806, column 27. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 817, column 17. See pages 93,94 of PBP. (Severity: 2) +100 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 820, column 13. Unnamed numeric literals make code less maintainable. (Severity: 2) +100 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 821, column 13. Unnamed numeric literals make code less maintainable. (Severity: 2) +993 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 824, column 24. Unnamed numeric literals make code less maintainable. (Severity: 2) +143 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 824, column 30. Unnamed numeric literals make code less maintainable. (Severity: 2) +993 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 827, column 24. Unnamed numeric literals make code less maintainable. (Severity: 2) +143 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 827, column 30. Unnamed numeric literals make code less maintainable. (Severity: 2) +Postfix control "if" used at line 829, column 31. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 830, column 12. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 844, column 5. See pages 93,94 of PBP. (Severity: 2) +3 is not one of the allowed literal values (0, 1, 2). Use the Readonly module or the "constant" pragma instead at line 869, column 21. Unnamed numeric literals make code less maintainable. (Severity: 2) +Long number not separated with underscores at line 956, column 20. See page 59 of PBP. (Severity: 2) +Postfix control "unless" used at line 958, column 57. See pages 96,97 of PBP. (Severity: 2) +Quotes used with an empty string at line 985, column 19. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 986, column 50. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 988, column 22. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 989, column 22. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 993, column 26. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1000, column 49. See page 53 of PBP. (Severity: 2) Postfix control "unless" used at line 1025, column 43. See pages 96,97 of PBP. (Severity: 2) -Quotes used with an empty string at line 1028, column 34. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1029, column 34. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 1032, column 15. See pages 93,94 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 1094, column 33. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 1094, column 33. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 1096, column 46. See page 53 of PBP. (Severity: 2) -Expression form of "map" at line 1096, column 51. See page 169 of PBP. (Severity: 4) -Regular expression without "/s" flag at line 1104, column 33. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 1104, column 33. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 1106, column 46. See page 53 of PBP. (Severity: 2) -Expression form of "map" at line 1106, column 51. See page 169 of PBP. (Severity: 4) -Postfix control "if" used at line 1177, column 15. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1187, column 3. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1195, column 32. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1242, column 3. See page 97 of PBP. (Severity: 2) -"unless" block used at line 1250, column 3. See page 97 of PBP. (Severity: 2) -Quotes used with an empty string at line 1282, column 50. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1283, column 50. See page 53 of PBP. (Severity: 2) -Double-sigil dereference at line 1293, column 39. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 1295, column 50. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 1305, column 49. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 1306, column 30. See page 228 of PBP. (Severity: 2) -Postfix control "if" used at line 1324, column 57. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1334, column 77. See pages 93,94 of PBP. (Severity: 2) -Double-sigil dereference at line 1337, column 2. See page 228 of PBP. (Severity: 2) -Postfix control "if" used at line 1342, column 5. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1346, column 3. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1349, column 2. See page 97 of PBP. (Severity: 2) -Quotes used with an empty string at line 1352, column 53. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 1387, column 79. See pages 93,94 of PBP. (Severity: 2) -Double-sigil dereference at line 1391, column 2. See page 228 of PBP. (Severity: 2) -Postfix control "if" used at line 1396, column 3. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1400, column 3. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1430, column 10. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1450, column 33. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1451, column 4. See page 97 of PBP. (Severity: 2) -Postfix control "if" used at line 1459, column 39. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1463, column 38. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1472, column 4. See page 97 of PBP. (Severity: 2) -Quotes used with an empty string at line 1474, column 45. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 1475, column 31. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 1475, column 31. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 1477, column 7. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1478, column 32. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1479, column 5. See page 97 of PBP. (Severity: 2) -Postfix control "if" used at line 1487, column 52. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1488, column 4. See page 97 of PBP. (Severity: 2) -Postfix control "if" used at line 1496, column 39. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1500, column 38. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1509, column 4. See page 97 of PBP. (Severity: 2) -Quotes used with an empty string at line 1510, column 49. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 1511, column 31. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 1511, column 31. See page 237 of PBP. (Severity: 2) -"unless" block used at line 1512, column 5. See page 97 of PBP. (Severity: 2) -Postfix control "if" used at line 1541, column 70. See pages 93,94 of PBP. (Severity: 2) -Code structure is deeply nested at line 1542, column 41. Consider refactoring. (Severity: 3) -"unless" block used at line 1542, column 41. See page 97 of PBP. (Severity: 2) -Postfix control "if" used at line 1553, column 39. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 1557, column 38. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 1621, column 47. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 1622, column 59. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1624, column 4. See page 97 of PBP. (Severity: 2) -Postfix control "if" used at line 1627, column 23. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 1661, column 3. See page 97 of PBP. (Severity: 2) -"unless" block used at line 1665, column 3. See page 97 of PBP. (Severity: 2) -Postfix control "unless" used at line 1697, column 20. See pages 96,97 of PBP. (Severity: 2) -Postfix control "unless" used at line 1698, column 20. See pages 96,97 of PBP. (Severity: 2) -Postfix control "if" used at line 1702, column 17. See pages 93,94 of PBP. (Severity: 2) -Too many arguments at line 1722, column 1. See page 182 of PBP. (Severity: 3) -Quotes used with an empty string at line 1732, column 58. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1733, column 58. See page 53 of PBP. (Severity: 2) -Too many arguments at line 1740, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 1750, column 1. See page 182 of PBP. (Severity: 3) -Quotes used with an empty string at line 1765, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1766, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1778, column 26. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1788, column 28. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 1796, column 17. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 1796, column 17. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 1806, column 55. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1807, column 74. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 1812, column 58. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 1844, column 23. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1872, column 77. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1875, column 65. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1878, column 73. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1881, column 77. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1884, column 76. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1887, column 68. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1890, column 67. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1893, column 77. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1896, column 79. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1899, column 71. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1902, column 69. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1905, column 65. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1908, column 67. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1911, column 67. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 1914, column 69. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 1929, column 15. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 1929, column 15. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 1941, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 1948, column 5. See page 53 of PBP. (Severity: 2) -Too many arguments at line 1984, column 1. See page 182 of PBP. (Severity: 3) -Postfix control "if" used at line 1988, column 19. See pages 93,94 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 1993, column 17. See page 79 of PBP. (Severity: 2) -Postfix control "if" used at line 1998, column 29. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 2006, column 35. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2009, column 35. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 2023, column 14. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 2035, column 14. See pages 93,94 of PBP. (Severity: 2) -Too many arguments at line 2039, column 1. See page 182 of PBP. (Severity: 3) -Postfix control "if" used at line 2054, column 35. See pages 93,94 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2071, column 17. See page 79 of PBP. (Severity: 2) -Postfix control "if" used at line 2086, column 22. See pages 93,94 of PBP. (Severity: 2) -Too many arguments at line 2095, column 1. See page 182 of PBP. (Severity: 3) -Quotes used with an empty string at line 2106, column 38. See page 53 of PBP. (Severity: 2) -Postfix control "unless" used at line 2109, column 51. See pages 96,97 of PBP. (Severity: 2) -Postfix control "if" used at line 2113, column 32. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 2114, column 35. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 2116, column 32. See pages 93,94 of PBP. (Severity: 2) -"unless" block used at line 2120, column 2. See page 97 of PBP. (Severity: 2) -Quotes used with an empty string at line 2131, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2174, column 40. See page 53 of PBP. (Severity: 2) -Too many arguments at line 2185, column 1. See page 182 of PBP. (Severity: 3) -Postfix control "if" used at line 2196, column 19. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 2208, column 41. See pages 93,94 of PBP. (Severity: 2) -Numeric escapes in interpolated string at line 2221, column 30. See page 56 of PBP. (Severity: 2) -Quotes used with an empty string at line 2223, column 41. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2241, column 32. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2241, column 32. See page 237 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2254, column 65. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2257, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2260, column 39. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2269, column 82. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2278, column 32. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2278, column 45. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2278, column 61. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2281, column 22. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2284, column 39. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2295, column 41. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2308, column 29. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2314, column 5. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2323, column 26. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2324, column 8. See page 79 of PBP. (Severity: 2) -Return value of "close" ignored at line 2347, column 2. Check the return value of "close" for success. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2367, column 12. See page 79 of PBP. (Severity: 2) -Quotes used with an empty string at line 2375, column 14. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2377, column 79. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2378, column 79. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2389, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2390, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2391, column 6. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2393, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2394, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2395, column 6. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2397, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2398, column 25. See page 53 of PBP. (Severity: 2) +Postfix control "unless" used at line 1027, column 43. See pages 96,97 of PBP. (Severity: 2) +Quotes used with an empty string at line 1030, column 34. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1031, column 34. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 1099, column 33. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 1099, column 33. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 1101, column 46. See page 53 of PBP. (Severity: 2) +Expression form of "map" at line 1101, column 51. See page 169 of PBP. (Severity: 4) +Regular expression without "/s" flag at line 1109, column 33. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 1109, column 33. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 1111, column 46. See page 53 of PBP. (Severity: 2) +Expression form of "map" at line 1111, column 51. See page 169 of PBP. (Severity: 4) +Postfix control "if" used at line 1182, column 15. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1192, column 3. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1200, column 32. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1247, column 3. See page 97 of PBP. (Severity: 2) +"unless" block used at line 1255, column 3. See page 97 of PBP. (Severity: 2) +Quotes used with an empty string at line 1287, column 50. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1288, column 50. See page 53 of PBP. (Severity: 2) +Double-sigil dereference at line 1298, column 39. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 1300, column 50. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 1310, column 49. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 1311, column 30. See page 228 of PBP. (Severity: 2) +Postfix control "if" used at line 1329, column 57. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1339, column 77. See pages 93,94 of PBP. (Severity: 2) +Double-sigil dereference at line 1342, column 2. See page 228 of PBP. (Severity: 2) +Postfix control "if" used at line 1347, column 5. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1351, column 3. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1354, column 2. See page 97 of PBP. (Severity: 2) +Quotes used with an empty string at line 1357, column 53. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 1392, column 79. See pages 93,94 of PBP. (Severity: 2) +Double-sigil dereference at line 1396, column 2. See page 228 of PBP. (Severity: 2) +Postfix control "if" used at line 1401, column 3. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1405, column 3. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1435, column 10. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1455, column 33. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1456, column 4. See page 97 of PBP. (Severity: 2) +Postfix control "if" used at line 1464, column 39. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1468, column 38. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1477, column 4. See page 97 of PBP. (Severity: 2) +Quotes used with an empty string at line 1479, column 45. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 1480, column 31. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 1480, column 31. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 1482, column 7. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1483, column 32. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1484, column 5. See page 97 of PBP. (Severity: 2) +Postfix control "if" used at line 1492, column 52. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1493, column 4. See page 97 of PBP. (Severity: 2) +Postfix control "if" used at line 1501, column 39. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1505, column 38. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1514, column 4. See page 97 of PBP. (Severity: 2) +Quotes used with an empty string at line 1515, column 49. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 1516, column 31. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 1516, column 31. See page 237 of PBP. (Severity: 2) +"unless" block used at line 1517, column 5. See page 97 of PBP. (Severity: 2) +Postfix control "if" used at line 1546, column 70. See pages 93,94 of PBP. (Severity: 2) +Code structure is deeply nested at line 1547, column 41. Consider refactoring. (Severity: 3) +"unless" block used at line 1547, column 41. See page 97 of PBP. (Severity: 2) +Postfix control "if" used at line 1558, column 39. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 1562, column 38. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 1626, column 47. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 1627, column 59. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1629, column 4. See page 97 of PBP. (Severity: 2) +Postfix control "if" used at line 1632, column 23. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 1666, column 3. See page 97 of PBP. (Severity: 2) +"unless" block used at line 1670, column 3. See page 97 of PBP. (Severity: 2) +Postfix control "unless" used at line 1702, column 20. See pages 96,97 of PBP. (Severity: 2) +Postfix control "unless" used at line 1703, column 20. See pages 96,97 of PBP. (Severity: 2) +Postfix control "if" used at line 1707, column 17. See pages 93,94 of PBP. (Severity: 2) +Too many arguments at line 1727, column 1. See page 182 of PBP. (Severity: 3) +Quotes used with an empty string at line 1737, column 58. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1738, column 58. See page 53 of PBP. (Severity: 2) +Too many arguments at line 1745, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 1755, column 1. See page 182 of PBP. (Severity: 3) +Quotes used with an empty string at line 1770, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1771, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1783, column 26. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1793, column 28. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 1801, column 17. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 1801, column 17. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 1811, column 55. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1812, column 74. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 1817, column 58. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 1849, column 23. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1877, column 77. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1880, column 65. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1883, column 73. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1886, column 77. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1889, column 76. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1892, column 68. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1895, column 67. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1898, column 77. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1901, column 79. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1904, column 71. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1907, column 69. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1910, column 65. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1913, column 67. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1916, column 67. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 1919, column 69. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 1934, column 15. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 1934, column 15. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 1946, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 1953, column 5. See page 53 of PBP. (Severity: 2) +Too many arguments at line 1989, column 1. See page 182 of PBP. (Severity: 3) +Postfix control "if" used at line 1993, column 19. See pages 93,94 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 1998, column 17. See page 79 of PBP. (Severity: 2) +Quotes used with an empty string at line 2014, column 35. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2017, column 35. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 2031, column 14. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 2043, column 14. See pages 93,94 of PBP. (Severity: 2) +Too many arguments at line 2047, column 1. See page 182 of PBP. (Severity: 3) +Postfix control "if" used at line 2062, column 35. See pages 93,94 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2079, column 17. See page 79 of PBP. (Severity: 2) +Too many arguments at line 2106, column 1. See page 182 of PBP. (Severity: 3) +Quotes used with an empty string at line 2117, column 38. See page 53 of PBP. (Severity: 2) +Postfix control "unless" used at line 2120, column 51. See pages 96,97 of PBP. (Severity: 2) +Postfix control "if" used at line 2124, column 32. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 2125, column 35. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 2127, column 32. See pages 93,94 of PBP. (Severity: 2) +"unless" block used at line 2131, column 2. See page 97 of PBP. (Severity: 2) +Quotes used with an empty string at line 2142, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2185, column 40. See page 53 of PBP. (Severity: 2) +Too many arguments at line 2197, column 1. See page 182 of PBP. (Severity: 3) +Postfix control "if" used at line 2208, column 19. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 2220, column 41. See pages 93,94 of PBP. (Severity: 2) +Numeric escapes in interpolated string at line 2233, column 30. See page 56 of PBP. (Severity: 2) +Quotes used with an empty string at line 2235, column 41. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2253, column 32. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2253, column 32. See page 237 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2266, column 65. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2269, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2272, column 39. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2281, column 82. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2290, column 32. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2290, column 45. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2290, column 61. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2293, column 22. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2296, column 39. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2307, column 41. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2320, column 29. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2326, column 5. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2335, column 26. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2336, column 8. See page 79 of PBP. (Severity: 2) +Return value of "close" ignored at line 2359, column 2. Check the return value of "close" for success. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2379, column 12. See page 79 of PBP. (Severity: 2) +Quotes used with an empty string at line 2387, column 14. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2389, column 79. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2390, column 79. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2401, column 25. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2402, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2403, column 6. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2405, column 25. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2406, column 25. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2407, column 6. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2409, column 25. See page 53 of PBP. (Severity: 2) Quotes used with an empty string at line 2410, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2411, column 6. See page 53 of PBP. (Severity: 2) -Reused variable name in lexical scope: $imap2 at line 2477, column 9. Invent unique variable names. (Severity: 3) -Regular expression without "/s" flag at line 2493, column 20. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/x" flag at line 2493, column 20. See page 236 of PBP. (Severity: 3) -Regular expression without "/m" flag at line 2493, column 20. See page 237 of PBP. (Severity: 2) -Mixed high and low-precedence booleans at line 2494, column 12. See page 70 of PBP. (Severity: 4) -Quotes used with an empty string at line 2494, column 24. See page 53 of PBP. (Severity: 2) -List of quoted literal words at line 2546, column 17. Use 'qw()' instead. (Severity: 2) -List of quoted literal words at line 2547, column 17. Use 'qw()' instead. (Severity: 2) -Double-sigil dereference at line 2612, column 28. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 2616, column 26. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 2625, column 36. See page 228 of PBP. (Severity: 2) -Quotes used with an empty string at line 2676, column 32. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2677, column 37. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2759, column 49. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2769, column 21. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2777, column 38. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2778, column 38. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2778, column 42. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2780, column 6. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2780, column 30. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2780, column 34. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2780, column 38. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2781, column 46. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2781, column 50. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2782, column 46. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2782, column 51. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2783, column 48. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2783, column 53. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2784, column 48. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2784, column 53. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2785, column 48. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2785, column 53. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2786, column 50. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2786, column 55. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2788, column 50. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2788, column 55. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2790, column 50. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2790, column 55. See page 53 of PBP. (Severity: 2) -Numeric escapes in interpolated string at line 2800, column 12. See page 56 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2803, column 14. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2803, column 14. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2804, column 14. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2804, column 14. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2805, column 14. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2805, column 14. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2806, column 21. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2806, column 21. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 2806, column 30. See pages 93,94 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2806, column 49. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2806, column 74. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2813, column 27. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2814, column 11. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2815, column 11. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2826, column 4. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2826, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2833, column 4. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2833, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2848, column 4. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2848, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2855, column 11. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2856, column 11. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2857, column 4. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2857, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2864, column 14. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2878, column 13. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2878, column 13. See page 237 of PBP. (Severity: 2) -Postfix control "unless" used at line 2884, column 4. See pages 96,97 of PBP. (Severity: 2) -Use 'eq' or hash instead of fixed-pattern regexps at line 2884, column 62. See pages 271,272 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2884, column 62. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2884, column 62. See page 237 of PBP. (Severity: 2) -Expression form of "eval" at line 2890, column 13. See page 161 of PBP. (Severity: 5) -Magic punctuation variable used at line 2892, column 49. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2893, column 14. See page 79 of PBP. (Severity: 2) -Quotes used with an empty string at line 2901, column 28. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2901, column 32. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2901, column 57. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2902, column 28. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 2910, column 42. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 2910, column 42. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 2911, column 17. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 2911, column 21. See page 53 of PBP. (Severity: 2) -"unless" block used at line 2937, column 3. See page 97 of PBP. (Severity: 2) -Double-sigil dereference at line 2949, column 3. See page 228 of PBP. (Severity: 2) -Postfix control "if" used at line 2949, column 35. See pages 93,94 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2952, column 71. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2952, column 71. See page 79 of PBP. (Severity: 2) -Quotes used with a noisy string at line 2955, column 100. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 2955, column 100. See page 79 of PBP. (Severity: 2) -Double-sigil dereference at line 2957, column 15. See page 228 of PBP. (Severity: 2) -Quotes used with an empty string at line 3001, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3001, column 23. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3005, column 41. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3064, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3075, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3075, column 23. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3076, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3090, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3090, column 23. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3092, column 5. See page 53 of PBP. (Severity: 2) -Expression form of "eval" at line 3108, column 13. See page 161 of PBP. (Severity: 5) -Magic punctuation variable used at line 3110, column 45. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 3111, column 10. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 3122, column 14. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 3124, column 14. See page 79 of PBP. (Severity: 2) -Double-sigil dereference at line 3125, column 37. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3125, column 54. See page 228 of PBP. (Severity: 2) -"unless" block used at line 3131, column 4. See page 97 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 3134, column 16. See page 79 of PBP. (Severity: 2) -Quotes used with an empty string at line 3145, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3155, column 5. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3163, column 17. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3163, column 17. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3166, column 28. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3166, column 28. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 3167, column 23. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3172, column 17. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3178, column 6. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3191, column 21. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3191, column 21. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 3192, column 44. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3195, column 24. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3203, column 21. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3203, column 21. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 3204, column 40. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3207, column 24. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 3229, column 67. See pages 93,94 of PBP. (Severity: 2) -Subroutine "select_msgs" does not end with "return" at line 3249, column 1. See page 197 of PBP. (Severity: 4) -Long number not separated with underscores at line 3333, column 63. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 3334, column 63. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 3355, column 45. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 3358, column 46. See page 59 of PBP. (Severity: 2) -Double-sigil dereference at line 3369, column 9. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3370, column 9. See page 228 of PBP. (Severity: 2) -"unless" block used at line 3373, column 3. See page 97 of PBP. (Severity: 2) -"unless" block used at line 3374, column 3. See page 97 of PBP. (Severity: 2) -Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3388, column 1. See page 197 of PBP. (Severity: 4) -Postfix control "if" used at line 3436, column 22. See pages 93,94 of PBP. (Severity: 2) -Subroutine "copy_message" with high complexity score (24) at line 3465, column 1. Consider refactoring. (Severity: 3) -Too many arguments at line 3465, column 1. See page 182 of PBP. (Severity: 3) -Quotes used with an empty string at line 3472, column 54. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3473, column 61. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 3481, column 41. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 3482, column 95. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 3518, column 19. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 3518, column 35. See page 53 of PBP. (Severity: 2) -Too many arguments at line 3533, column 1. See page 182 of PBP. (Severity: 3) -Quotes used with an empty string at line 3538, column 60. See page 53 of PBP. (Severity: 2) -"unless" block used at line 3540, column 2. See page 97 of PBP. (Severity: 2) -Quotes used with an empty string at line 3543, column 24. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 3545, column 34. See pages 93,94 of PBP. (Severity: 2) -Quotes used with a noisy string at line 3570, column 3. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 3573, column 49. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3581, column 16. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3603, column 15. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3603, column 15. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 3608, column 37. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 3609, column 64. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 3616, column 16. See page 53 of PBP. (Severity: 2) -Subroutine "tests_subject" does not end with "return" at line 3627, column 1. See page 197 of PBP. (Severity: 4) -Quotes used with an empty string at line 3628, column 6. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3628, column 21. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3668, column 6. See page 53 of PBP. (Severity: 2) -Too many arguments at line 3690, column 1. See page 182 of PBP. (Severity: 3) -Quotes used with an empty string at line 3699, column 58. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3711, column 20. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3711, column 20. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3726, column 75. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3726, column 75. See page 237 of PBP. (Severity: 2) -Subroutine "sleep_if_needed" does not end with "return" at line 3746, column 1. See page 197 of PBP. (Severity: 4) -Reused variable name in lexical scope: $total_bytes_transferred at line 3747, column 2. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $nb_msg_transferred at line 3747, column 2. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $nb_msg_transferred at line 3759, column 9. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $maxmessagespersecond at line 3759, column 9. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $total_bytes_transferred at line 3780, column 9. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $maxbytespersecond at line 3780, column 9. Invent unique variable names. (Severity: 3) -Postfix control "if" used at line 3808, column 28. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 3816, column 10. See page 53 of PBP. (Severity: 2) -Double-sigil dereference at line 3849, column 2. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3849, column 22. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3850, column 2. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3850, column 22. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3852, column 26. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3909, column 37. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 3910, column 37. See page 228 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 3923, column 23. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 3923, column 23. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 3950, column 50. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 3997, column 35. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3997, column 46. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3997, column 57. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3997, column 68. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3997, column 79. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3998, column 35. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3998, column 46. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3998, column 57. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3998, column 68. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3998, column 79. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 3998, column 90. See page 53 of PBP. (Severity: 2) -Double-sigil dereference at line 4002, column 37. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 4003, column 37. See page 228 of PBP. (Severity: 2) -Quotes used with an empty string at line 4045, column 32. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4045, column 43. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4045, column 54. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4045, column 65. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4045, column 76. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4046, column 32. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4046, column 43. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4046, column 54. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4046, column 65. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4046, column 76. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4046, column 87. See page 53 of PBP. (Severity: 2) -Double-sigil dereference at line 4049, column 34. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 4050, column 34. See page 228 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4065, column 16. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4065, column 16. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 4078, column 47. See page 53 of PBP. (Severity: 2) -Double-sigil dereference at line 4110, column 78. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 4111, column 21. See page 228 of PBP. (Severity: 2) -Quotes used with an empty string at line 4114, column 102. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4123, column 29. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 4123, column 29. See page 79 of PBP. (Severity: 2) -Quotes used with an empty string at line 4162, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4163, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4167, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4168, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4169, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4213, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4214, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4215, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4219, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4220, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4221, column 24. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4248, column 49. See page 53 of PBP. (Severity: 2) -Mismatched operator at line 4248, column 75. Numeric/string operators and operands should match. (Severity: 3) -Quotes used with an empty string at line 4297, column 33. See page 53 of PBP. (Severity: 2) -Hard tabs used at line 4332, column 10. See page 20 of PBP. (Severity: 3) -Quotes used with an empty string at line 4367, column 43. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4368, column 44. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4369, column 48. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4380, column 25. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4381, column 25. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4397, column 21. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4397, column 21. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4399, column 20. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4399, column 20. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4423, column 13. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4423, column 13. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 4429, column 5. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4429, column 32. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4429, column 36. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4430, column 46. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4431, column 54. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4434, column 54. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 4435, column 60. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4456, column 15. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4457, column 15. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4473, column 15. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4474, column 15. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4477, column 15. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4486, column 15. See page 53 of PBP. (Severity: 2) -Expression form of "eval" at line 4603, column 13. See page 161 of PBP. (Severity: 5) -Magic punctuation variable used at line 4605, column 38. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 4606, column 10. See page 79 of PBP. (Severity: 2) -Long number not separated with underscores at line 4619, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4620, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4622, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4623, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4625, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4626, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4628, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4629, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4631, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4632, column 46. See page 59 of PBP. (Severity: 2) -Long number not separated with underscores at line 4634, column 49. See page 59 of PBP. (Severity: 2) -Quotes used with an empty string at line 4643, column 23. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 4688, column 65. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 4747, column 31. See pages 93,94 of PBP. (Severity: 2) -Too many arguments at line 4758, column 1. See page 182 of PBP. (Severity: 3) -Double-sigil dereference at line 4762, column 29. See page 228 of PBP. (Severity: 2) -Double-sigil dereference at line 4773, column 43. See page 228 of PBP. (Severity: 2) -Postfix control "unless" used at line 4796, column 29. See pages 96,97 of PBP. (Severity: 2) -Double-sigil dereference at line 4822, column 29. See page 228 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4833, column 30. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4833, column 30. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4848, column 24. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4848, column 24. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4851, column 24. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4851, column 24. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4854, column 24. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4854, column 24. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4857, column 24. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4857, column 24. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4860, column 98. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4860, column 98. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 4873, column 37. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 4873, column 41. See page 53 of PBP. (Severity: 2) -Numeric escapes in interpolated string at line 4878, column 51. See page 56 of PBP. (Severity: 2) -Quotes used with an empty string at line 4888, column 21. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 4890, column 52. See page 79 of PBP. (Severity: 2) -Return value of "close" ignored at line 4892, column 9. Check the return value of "close" for success. (Severity: 2) -Magic punctuation variable used in interpolated string at line 4901, column 46. See page 79 of PBP. (Severity: 2) -Return value of "close" ignored at line 4903, column 2. Check the return value of "close" for success. (Severity: 2) -Quotes used with an empty string at line 4904, column 14. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated string at line 4910, column 67. See page 79 of PBP. (Severity: 2) -Return value of "close" ignored at line 4912, column 2. Check the return value of "close" for success. (Severity: 2) -Regular expression without "/s" flag at line 4927, column 21. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4927, column 21. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 4951, column 24. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 4951, column 24. See page 237 of PBP. (Severity: 2) -Magic punctuation variable used at line 4968, column 18. See page 79 of PBP. (Severity: 2) -Return value of "close" ignored at line 4991, column 2. Check the return value of "close" for success. (Severity: 2) -Magic punctuation variable used in interpolated string at line 5011, column 20. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used at line 5025, column 23. See page 79 of PBP. (Severity: 2) -Magic punctuation variable used at line 5027, column 7. See page 79 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5027, column 13. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5027, column 13. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 5042, column 20. See page 53 of PBP. (Severity: 2) -Quotes used with an empty string at line 5044, column 11. See page 53 of PBP. (Severity: 2) -String delimiter used with "split" at line 5096, column 28. Express it as a regex instead. (Severity: 2) -Quotes used with a noisy string at line 5096, column 34. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5159, column 17. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5159, column 17. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5168, column 17. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5168, column 17. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 5206, column 13. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5209, column 17. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5209, column 17. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 5212, column 16. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 5212, column 30. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 5213, column 22. See pages 93,94 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5218, column 12. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5218, column 12. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 5230, column 38. See pages 93,94 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5230, column 72. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5230, column 72. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 5231, column 38. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 5233, column 46. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 5237, column 30. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 5239, column 34. See pages 93,94 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5244, column 12. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5244, column 12. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5260, column 19. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5260, column 19. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5273, column 12. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5273, column 12. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 5279, column 29. See pages 93,94 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5285, column 12. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5285, column 12. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5296, column 12. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5296, column 12. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 5317, column 5. See page 53 of PBP. (Severity: 2) -Double-sigil dereference at line 5369, column 33. See page 228 of PBP. (Severity: 2) -Expression form of "eval" at line 5390, column 43. See page 161 of PBP. (Severity: 5) -Expression form of "eval" at line 5394, column 45. See page 161 of PBP. (Severity: 5) -Postfix control "if" used at line 5399, column 34. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 5400, column 36. See pages 93,94 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5414, column 33. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5414, column 33. See page 237 of PBP. (Severity: 2) -Quotes used with an empty string at line 5415, column 36. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5453, column 27. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5453, column 27. See page 237 of PBP. (Severity: 2) -Use 'eq' or hash instead of fixed-pattern regexps at line 5457, column 36. See pages 271,272 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5457, column 36. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5457, column 36. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5459, column 31. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5459, column 31. See page 237 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5465, column 34. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5465, column 34. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 5468, column 65. See pages 93,94 of PBP. (Severity: 2) -Quotes used with an empty string at line 5594, column 17. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5599, column 20. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5599, column 20. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 5605, column 28. See pages 93,94 of PBP. (Severity: 2) -Quotes used with a noisy string at line 5605, column 33. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 5606, column 28. See pages 93,94 of PBP. (Severity: 2) -Quotes used with a noisy string at line 5606, column 33. See page 53 of PBP. (Severity: 2) -Long number not separated with underscores at line 5639, column 55. See page 59 of PBP. (Severity: 2) -"$i" is declared but not used at line 5658, column 9. Unused variables clutter code and make it harder to read. (Severity: 3) -Quotes used with an empty string at line 5669, column 28. See page 53 of PBP. (Severity: 2) -Long number not separated with underscores at line 5677, column 40. See page 59 of PBP. (Severity: 2) -Quotes used with an empty string at line 5689, column 25. See page 53 of PBP. (Severity: 2) -Postfix control "if" used at line 5690, column 43. See pages 93,94 of PBP. (Severity: 2) -Quotes used with a noisy string at line 5691, column 54. See page 53 of PBP. (Severity: 2) -Quotes used with a noisy string at line 5691, column 60. See page 53 of PBP. (Severity: 2) -Magic punctuation variable used in interpolated here-document at line 5692, column 15. See page 79 of PBP. (Severity: 2) -Quotes used with a noisy string at line 5941, column 20. See page 53 of PBP. (Severity: 2) -Regular expression without "/s" flag at line 5946, column 14. See pages 240,241 of PBP. (Severity: 2) -Regular expression without "/m" flag at line 5946, column 14. See page 237 of PBP. (Severity: 2) -Postfix control "if" used at line 6089, column 49. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 6102, column 12. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 6106, column 32. See pages 93,94 of PBP. (Severity: 2) -Postfix control "unless" used at line 6109, column 30. See pages 96,97 of PBP. (Severity: 2) -Postfix control "if" used at line 6117, column 32. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 6128, column 32. See pages 93,94 of PBP. (Severity: 2) -Postfix control "if" used at line 6195, column 33. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 2413, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2414, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2417, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2418, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2419, column 6. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2421, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2422, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2423, column 6. See page 53 of PBP. (Severity: 2) +Reused variable name in lexical scope: $imap2 at line 2489, column 9. Invent unique variable names. (Severity: 3) +Regular expression without "/s" flag at line 2505, column 20. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/x" flag at line 2505, column 20. See page 236 of PBP. (Severity: 3) +Regular expression without "/m" flag at line 2505, column 20. See page 237 of PBP. (Severity: 2) +Mixed high and low-precedence booleans at line 2506, column 12. See page 70 of PBP. (Severity: 4) +Quotes used with an empty string at line 2506, column 24. See page 53 of PBP. (Severity: 2) +List of quoted literal words at line 2558, column 17. Use 'qw()' instead. (Severity: 2) +List of quoted literal words at line 2559, column 17. Use 'qw()' instead. (Severity: 2) +Double-sigil dereference at line 2624, column 28. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 2628, column 26. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 2637, column 36. See page 228 of PBP. (Severity: 2) +Quotes used with an empty string at line 2688, column 32. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2689, column 37. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2798, column 49. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2808, column 21. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2816, column 38. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2817, column 38. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2817, column 42. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2819, column 6. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2819, column 30. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2819, column 34. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2819, column 38. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2820, column 46. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2820, column 50. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2821, column 46. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2821, column 51. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2822, column 48. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2822, column 53. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2823, column 48. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2823, column 53. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2824, column 48. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2824, column 53. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2825, column 50. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2825, column 55. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2827, column 50. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2827, column 55. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2829, column 50. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2829, column 55. See page 53 of PBP. (Severity: 2) +Numeric escapes in interpolated string at line 2839, column 12. See page 56 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2842, column 14. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2842, column 14. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2843, column 14. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2843, column 14. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2844, column 14. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2844, column 14. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2845, column 21. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2845, column 21. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 2845, column 30. See pages 93,94 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2845, column 49. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2845, column 74. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2852, column 27. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2853, column 11. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2854, column 11. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2865, column 4. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2865, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2872, column 4. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2872, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2887, column 4. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2887, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2894, column 11. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2895, column 11. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2896, column 4. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2896, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2903, column 14. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2917, column 13. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2917, column 13. See page 237 of PBP. (Severity: 2) +Postfix control "unless" used at line 2923, column 4. See pages 96,97 of PBP. (Severity: 2) +Use 'eq' or hash instead of fixed-pattern regexps at line 2923, column 62. See pages 271,272 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2923, column 62. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2923, column 62. See page 237 of PBP. (Severity: 2) +Expression form of "eval" at line 2929, column 13. See page 161 of PBP. (Severity: 5) +Magic punctuation variable used at line 2931, column 49. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2932, column 14. See page 79 of PBP. (Severity: 2) +Quotes used with an empty string at line 2940, column 28. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2940, column 32. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2940, column 57. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2941, column 28. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 2949, column 42. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 2949, column 42. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 2950, column 17. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 2950, column 21. See page 53 of PBP. (Severity: 2) +"unless" block used at line 2976, column 3. See page 97 of PBP. (Severity: 2) +Double-sigil dereference at line 2989, column 3. See page 228 of PBP. (Severity: 2) +Postfix control "if" used at line 2989, column 35. See pages 93,94 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2992, column 71. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2992, column 71. See page 79 of PBP. (Severity: 2) +Quotes used with a noisy string at line 2995, column 100. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 2995, column 100. See page 79 of PBP. (Severity: 2) +Double-sigil dereference at line 2997, column 15. See page 228 of PBP. (Severity: 2) +Quotes used with an empty string at line 3041, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3041, column 23. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3045, column 41. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3104, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3115, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3115, column 23. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3116, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3130, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3130, column 23. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3132, column 5. See page 53 of PBP. (Severity: 2) +Expression form of "eval" at line 3148, column 13. See page 161 of PBP. (Severity: 5) +Magic punctuation variable used at line 3150, column 45. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 3151, column 10. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 3162, column 14. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 3164, column 14. See page 79 of PBP. (Severity: 2) +Double-sigil dereference at line 3165, column 37. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3165, column 54. See page 228 of PBP. (Severity: 2) +"unless" block used at line 3171, column 4. See page 97 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 3174, column 16. See page 79 of PBP. (Severity: 2) +Quotes used with an empty string at line 3185, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3195, column 5. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3203, column 17. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3203, column 17. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3206, column 28. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3206, column 28. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 3207, column 23. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3212, column 17. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3218, column 6. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3231, column 21. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3231, column 21. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 3232, column 44. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3235, column 24. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3243, column 21. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3243, column 21. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 3244, column 40. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3247, column 24. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 3269, column 67. See pages 93,94 of PBP. (Severity: 2) +Subroutine "select_msgs" does not end with "return" at line 3289, column 1. See page 197 of PBP. (Severity: 4) +Long number not separated with underscores at line 3373, column 63. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 3374, column 63. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 3395, column 45. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 3398, column 46. See page 59 of PBP. (Severity: 2) +Double-sigil dereference at line 3409, column 9. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3410, column 9. See page 228 of PBP. (Severity: 2) +"unless" block used at line 3413, column 3. See page 97 of PBP. (Severity: 2) +"unless" block used at line 3414, column 3. See page 97 of PBP. (Severity: 2) +Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3428, column 1. See page 197 of PBP. (Severity: 4) +Postfix control "if" used at line 3476, column 22. See pages 93,94 of PBP. (Severity: 2) +Subroutine "copy_message" with high complexity score (30) at line 3505, column 1. Consider refactoring. (Severity: 3) +Too many arguments at line 3505, column 1. See page 182 of PBP. (Severity: 3) +Quotes used with an empty string at line 3512, column 54. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3513, column 61. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 3523, column 41. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 3524, column 95. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 3579, column 19. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 3579, column 35. See page 53 of PBP. (Severity: 2) +Too many arguments at line 3596, column 1. See page 182 of PBP. (Severity: 3) +Quotes used with an empty string at line 3601, column 60. See page 53 of PBP. (Severity: 2) +"unless" block used at line 3603, column 2. See page 97 of PBP. (Severity: 2) +Quotes used with an empty string at line 3606, column 24. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 3608, column 34. See pages 93,94 of PBP. (Severity: 2) +Quotes used with a noisy string at line 3633, column 3. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 3636, column 49. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3644, column 16. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3666, column 15. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3666, column 15. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 3671, column 37. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 3672, column 64. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 3679, column 16. See page 53 of PBP. (Severity: 2) +Subroutine "tests_subject" does not end with "return" at line 3690, column 1. See page 197 of PBP. (Severity: 4) +Quotes used with an empty string at line 3691, column 6. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3691, column 21. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 3731, column 6. See page 53 of PBP. (Severity: 2) +Too many arguments at line 3753, column 1. See page 182 of PBP. (Severity: 3) +Quotes used with an empty string at line 3762, column 58. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3774, column 20. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3774, column 20. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3789, column 75. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3789, column 75. See page 237 of PBP. (Severity: 2) +Subroutine "sleep_if_needed" does not end with "return" at line 3809, column 1. See page 197 of PBP. (Severity: 4) +Reused variable name in lexical scope: $total_bytes_transferred at line 3810, column 2. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $nb_msg_transferred at line 3810, column 2. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $nb_msg_transferred at line 3822, column 9. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $maxmessagespersecond at line 3822, column 9. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $total_bytes_transferred at line 3843, column 9. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $maxbytespersecond at line 3843, column 9. Invent unique variable names. (Severity: 3) +Postfix control "if" used at line 3871, column 28. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 3879, column 10. See page 53 of PBP. (Severity: 2) +Double-sigil dereference at line 3912, column 2. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3912, column 22. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3913, column 2. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3913, column 22. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3915, column 26. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3972, column 37. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 3973, column 37. See page 228 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 3986, column 23. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 3986, column 23. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 4013, column 50. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 4060, column 35. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4060, column 46. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4060, column 57. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4060, column 68. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4060, column 79. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4061, column 35. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4061, column 46. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4061, column 57. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4061, column 68. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4061, column 79. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4061, column 90. See page 53 of PBP. (Severity: 2) +Double-sigil dereference at line 4065, column 37. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 4066, column 37. See page 228 of PBP. (Severity: 2) +Quotes used with an empty string at line 4108, column 32. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4108, column 43. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4108, column 54. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4108, column 65. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4108, column 76. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4109, column 32. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4109, column 43. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4109, column 54. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4109, column 65. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4109, column 76. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4109, column 87. See page 53 of PBP. (Severity: 2) +Double-sigil dereference at line 4112, column 34. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 4113, column 34. See page 228 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4128, column 16. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4128, column 16. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 4141, column 47. See page 53 of PBP. (Severity: 2) +Double-sigil dereference at line 4173, column 78. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 4174, column 21. See page 228 of PBP. (Severity: 2) +Quotes used with an empty string at line 4177, column 102. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4186, column 29. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 4186, column 29. See page 79 of PBP. (Severity: 2) +Quotes used with an empty string at line 4225, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4226, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4230, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4231, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4232, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4276, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4277, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4278, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4282, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4283, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4284, column 24. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4311, column 49. See page 53 of PBP. (Severity: 2) +Mismatched operator at line 4311, column 75. Numeric/string operators and operands should match. (Severity: 3) +Quotes used with an empty string at line 4360, column 33. See page 53 of PBP. (Severity: 2) +Hard tabs used at line 4395, column 10. See page 20 of PBP. (Severity: 3) +Quotes used with an empty string at line 4430, column 43. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4431, column 44. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4432, column 48. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4443, column 25. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4444, column 25. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4460, column 21. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4460, column 21. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4462, column 20. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4462, column 20. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4486, column 13. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4486, column 13. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 4492, column 5. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4492, column 32. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4492, column 36. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4493, column 46. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4494, column 54. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4497, column 54. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 4498, column 60. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4519, column 15. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4520, column 15. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4536, column 15. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4537, column 15. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4540, column 15. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4549, column 15. See page 53 of PBP. (Severity: 2) +Expression form of "eval" at line 4666, column 13. See page 161 of PBP. (Severity: 5) +Magic punctuation variable used at line 4668, column 38. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 4669, column 10. See page 79 of PBP. (Severity: 2) +Long number not separated with underscores at line 4682, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4683, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4685, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4686, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4688, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4689, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4691, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4692, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4694, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4695, column 46. See page 59 of PBP. (Severity: 2) +Long number not separated with underscores at line 4697, column 49. See page 59 of PBP. (Severity: 2) +Quotes used with an empty string at line 4706, column 23. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 4751, column 65. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 4810, column 31. See pages 93,94 of PBP. (Severity: 2) +Too many arguments at line 4821, column 1. See page 182 of PBP. (Severity: 3) +Double-sigil dereference at line 4825, column 29. See page 228 of PBP. (Severity: 2) +Double-sigil dereference at line 4836, column 43. See page 228 of PBP. (Severity: 2) +Postfix control "unless" used at line 4859, column 29. See pages 96,97 of PBP. (Severity: 2) +Double-sigil dereference at line 4885, column 29. See page 228 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4896, column 30. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4896, column 30. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4911, column 24. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4911, column 24. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4914, column 24. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4914, column 24. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4917, column 24. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4917, column 24. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4920, column 24. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4920, column 24. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 4923, column 98. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4923, column 98. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 4936, column 37. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 4936, column 41. See page 53 of PBP. (Severity: 2) +Numeric escapes in interpolated string at line 4941, column 51. See page 56 of PBP. (Severity: 2) +Quotes used with an empty string at line 4951, column 21. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 4953, column 52. See page 79 of PBP. (Severity: 2) +Return value of "close" ignored at line 4955, column 9. Check the return value of "close" for success. (Severity: 2) +Magic punctuation variable used in interpolated string at line 4964, column 46. See page 79 of PBP. (Severity: 2) +Return value of "close" ignored at line 4966, column 2. Check the return value of "close" for success. (Severity: 2) +Quotes used with an empty string at line 4967, column 14. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated string at line 4973, column 67. See page 79 of PBP. (Severity: 2) +Return value of "close" ignored at line 4975, column 2. Check the return value of "close" for success. (Severity: 2) +Regular expression without "/s" flag at line 4990, column 21. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 4990, column 21. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5014, column 24. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5014, column 24. See page 237 of PBP. (Severity: 2) +Magic punctuation variable used at line 5031, column 18. See page 79 of PBP. (Severity: 2) +Return value of "close" ignored at line 5054, column 2. Check the return value of "close" for success. (Severity: 2) +Magic punctuation variable used in interpolated string at line 5074, column 20. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used at line 5088, column 23. See page 79 of PBP. (Severity: 2) +Magic punctuation variable used at line 5090, column 7. See page 79 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5090, column 13. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5090, column 13. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 5105, column 20. See page 53 of PBP. (Severity: 2) +Quotes used with an empty string at line 5107, column 11. See page 53 of PBP. (Severity: 2) +String delimiter used with "split" at line 5159, column 28. Express it as a regex instead. (Severity: 2) +Quotes used with a noisy string at line 5159, column 34. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5222, column 17. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5222, column 17. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5231, column 17. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5231, column 17. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 5269, column 13. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5272, column 17. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5272, column 17. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 5275, column 16. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 5275, column 30. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 5276, column 22. See pages 93,94 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5281, column 12. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5281, column 12. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 5293, column 38. See pages 93,94 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5293, column 72. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5293, column 72. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 5294, column 38. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 5296, column 46. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 5300, column 30. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 5302, column 34. See pages 93,94 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5307, column 12. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5307, column 12. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5323, column 19. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5323, column 19. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5336, column 12. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5336, column 12. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 5342, column 29. See pages 93,94 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5348, column 12. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5348, column 12. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5359, column 12. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5359, column 12. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 5380, column 5. See page 53 of PBP. (Severity: 2) +Double-sigil dereference at line 5432, column 33. See page 228 of PBP. (Severity: 2) +Expression form of "eval" at line 5453, column 43. See page 161 of PBP. (Severity: 5) +Expression form of "eval" at line 5457, column 45. See page 161 of PBP. (Severity: 5) +Postfix control "if" used at line 5462, column 34. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 5463, column 36. See pages 93,94 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5477, column 33. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5477, column 33. See page 237 of PBP. (Severity: 2) +Quotes used with an empty string at line 5478, column 36. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5516, column 27. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5516, column 27. See page 237 of PBP. (Severity: 2) +Use 'eq' or hash instead of fixed-pattern regexps at line 5520, column 36. See pages 271,272 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5520, column 36. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5520, column 36. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5522, column 31. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5522, column 31. See page 237 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5528, column 34. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5528, column 34. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 5531, column 65. See pages 93,94 of PBP. (Severity: 2) +Quotes used with an empty string at line 5657, column 17. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 5662, column 20. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 5662, column 20. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 5668, column 28. See pages 93,94 of PBP. (Severity: 2) +Quotes used with a noisy string at line 5668, column 33. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 5669, column 28. See pages 93,94 of PBP. (Severity: 2) +Quotes used with a noisy string at line 5669, column 33. See page 53 of PBP. (Severity: 2) +Long number not separated with underscores at line 5702, column 55. See page 59 of PBP. (Severity: 2) +"$i" is declared but not used at line 5721, column 9. Unused variables clutter code and make it harder to read. (Severity: 3) +Quotes used with an empty string at line 5732, column 28. See page 53 of PBP. (Severity: 2) +Long number not separated with underscores at line 5740, column 40. See page 59 of PBP. (Severity: 2) +Quotes used with an empty string at line 5752, column 25. See page 53 of PBP. (Severity: 2) +Postfix control "if" used at line 5753, column 43. See pages 93,94 of PBP. (Severity: 2) +Quotes used with a noisy string at line 5754, column 54. See page 53 of PBP. (Severity: 2) +Quotes used with a noisy string at line 5754, column 60. See page 53 of PBP. (Severity: 2) +Magic punctuation variable used in interpolated here-document at line 5755, column 15. See page 79 of PBP. (Severity: 2) +Quotes used with a noisy string at line 6004, column 20. See page 53 of PBP. (Severity: 2) +Regular expression without "/s" flag at line 6009, column 14. See pages 240,241 of PBP. (Severity: 2) +Regular expression without "/m" flag at line 6009, column 14. See page 237 of PBP. (Severity: 2) +Postfix control "if" used at line 6154, column 49. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 6167, column 12. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 6171, column 32. See pages 93,94 of PBP. (Severity: 2) +Postfix control "unless" used at line 6174, column 30. See pages 96,97 of PBP. (Severity: 2) +Postfix control "if" used at line 6182, column 32. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 6193, column 32. See pages 93,94 of PBP. (Severity: 2) +Postfix control "if" used at line 6260, column 33. See pages 93,94 of PBP. (Severity: 2) diff --git a/perlcritic_3.out b/perlcritic_3.out index 48ebaff..a890792 100644 --- a/perlcritic_3.out +++ b/perlcritic_3.out @@ -1,37 +1,37 @@ Main code has high complexity score (350) at line 1, column 1. Consider refactoring. (Severity: 3) -Expression form of "map" at line 1096, column 51. See page 169 of PBP. (Severity: 4) -Expression form of "map" at line 1106, column 51. See page 169 of PBP. (Severity: 4) -Code structure is deeply nested at line 1542, column 41. Consider refactoring. (Severity: 3) -Too many arguments at line 1722, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 1740, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 1750, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 1984, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 2039, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 2095, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 2185, column 1. See page 182 of PBP. (Severity: 3) -Reused variable name in lexical scope: $imap2 at line 2477, column 9. Invent unique variable names. (Severity: 3) -Regular expression without "/x" flag at line 2493, column 20. See page 236 of PBP. (Severity: 3) -Mixed high and low-precedence booleans at line 2494, column 12. See page 70 of PBP. (Severity: 4) -Expression form of "eval" at line 2890, column 13. See page 161 of PBP. (Severity: 5) -Expression form of "eval" at line 3108, column 13. See page 161 of PBP. (Severity: 5) -Subroutine "select_msgs" does not end with "return" at line 3249, column 1. See page 197 of PBP. (Severity: 4) -Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3388, column 1. See page 197 of PBP. (Severity: 4) -Subroutine "copy_message" with high complexity score (24) at line 3465, column 1. Consider refactoring. (Severity: 3) -Too many arguments at line 3465, column 1. See page 182 of PBP. (Severity: 3) -Too many arguments at line 3533, column 1. See page 182 of PBP. (Severity: 3) -Subroutine "tests_subject" does not end with "return" at line 3627, column 1. See page 197 of PBP. (Severity: 4) -Too many arguments at line 3690, column 1. See page 182 of PBP. (Severity: 3) -Subroutine "sleep_if_needed" does not end with "return" at line 3746, column 1. See page 197 of PBP. (Severity: 4) -Reused variable name in lexical scope: $total_bytes_transferred at line 3747, column 2. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $nb_msg_transferred at line 3747, column 2. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $nb_msg_transferred at line 3759, column 9. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $maxmessagespersecond at line 3759, column 9. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $total_bytes_transferred at line 3780, column 9. Invent unique variable names. (Severity: 3) -Reused variable name in lexical scope: $maxbytespersecond at line 3780, column 9. Invent unique variable names. (Severity: 3) -Mismatched operator at line 4248, column 75. Numeric/string operators and operands should match. (Severity: 3) -Hard tabs used at line 4332, column 10. See page 20 of PBP. (Severity: 3) -Expression form of "eval" at line 4603, column 13. See page 161 of PBP. (Severity: 5) -Too many arguments at line 4758, column 1. See page 182 of PBP. (Severity: 3) -Expression form of "eval" at line 5390, column 43. See page 161 of PBP. (Severity: 5) -Expression form of "eval" at line 5394, column 45. See page 161 of PBP. (Severity: 5) -"$i" is declared but not used at line 5658, column 9. Unused variables clutter code and make it harder to read. (Severity: 3) +Expression form of "map" at line 1101, column 51. See page 169 of PBP. (Severity: 4) +Expression form of "map" at line 1111, column 51. See page 169 of PBP. (Severity: 4) +Code structure is deeply nested at line 1547, column 41. Consider refactoring. (Severity: 3) +Too many arguments at line 1727, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 1745, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 1755, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 1989, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 2047, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 2106, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 2197, column 1. See page 182 of PBP. (Severity: 3) +Reused variable name in lexical scope: $imap2 at line 2489, column 9. Invent unique variable names. (Severity: 3) +Regular expression without "/x" flag at line 2505, column 20. See page 236 of PBP. (Severity: 3) +Mixed high and low-precedence booleans at line 2506, column 12. See page 70 of PBP. (Severity: 4) +Expression form of "eval" at line 2929, column 13. See page 161 of PBP. (Severity: 5) +Expression form of "eval" at line 3148, column 13. See page 161 of PBP. (Severity: 5) +Subroutine "select_msgs" does not end with "return" at line 3289, column 1. See page 197 of PBP. (Severity: 4) +Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3428, column 1. See page 197 of PBP. (Severity: 4) +Subroutine "copy_message" with high complexity score (30) at line 3505, column 1. Consider refactoring. (Severity: 3) +Too many arguments at line 3505, column 1. See page 182 of PBP. (Severity: 3) +Too many arguments at line 3596, column 1. See page 182 of PBP. (Severity: 3) +Subroutine "tests_subject" does not end with "return" at line 3690, column 1. See page 197 of PBP. (Severity: 4) +Too many arguments at line 3753, column 1. See page 182 of PBP. (Severity: 3) +Subroutine "sleep_if_needed" does not end with "return" at line 3809, column 1. See page 197 of PBP. (Severity: 4) +Reused variable name in lexical scope: $total_bytes_transferred at line 3810, column 2. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $nb_msg_transferred at line 3810, column 2. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $nb_msg_transferred at line 3822, column 9. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $maxmessagespersecond at line 3822, column 9. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $total_bytes_transferred at line 3843, column 9. Invent unique variable names. (Severity: 3) +Reused variable name in lexical scope: $maxbytespersecond at line 3843, column 9. Invent unique variable names. (Severity: 3) +Mismatched operator at line 4311, column 75. Numeric/string operators and operands should match. (Severity: 3) +Hard tabs used at line 4395, column 10. See page 20 of PBP. (Severity: 3) +Expression form of "eval" at line 4666, column 13. See page 161 of PBP. (Severity: 5) +Too many arguments at line 4821, column 1. See page 182 of PBP. (Severity: 3) +Expression form of "eval" at line 5453, column 43. See page 161 of PBP. (Severity: 5) +Expression form of "eval" at line 5457, column 45. See page 161 of PBP. (Severity: 5) +"$i" is declared but not used at line 5721, column 9. Unused variables clutter code and make it harder to read. (Severity: 3) diff --git a/tests.sh b/tests.sh index 4b9036b..287ed72 100644 --- a/tests.sh +++ b/tests.sh @@ -1,6 +1,6 @@ #!/bin/sh -# $Id: tests.sh,v 1.233 2013/12/25 03:25:18 gilles Exp gilles $ +# $Id: tests.sh,v 1.235 2014/01/27 02:22:29 gilles Exp gilles $ # Example 1: # CMD_PERL='perl -I./W/Mail-IMAPClient-3.35/lib' sh -x tests.sh @@ -1183,6 +1183,42 @@ ll_maxlinelength() --maxlinelength 8 --nofoldersizes --folder INBOX } +ll_minmaxlinelength() +{ + can_send && sendtestmessage + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 tata \ + --passfile1 ../../var/pass/secret.tata \ + --host2 $HOST2 --user2 titi \ + --passfile2 ../../var/pass/secret.titi \ + --minmaxlinelength 1000 --nofoldersizes --folder INBOX +} + + +ll_maxlinelength_prepa_1() +{ + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 gilles@est.belle \ + --passfile1 ../../var/pass/secret.gilles_mbox \ + --host2 $HOST2 --user2 tete@est.belle \ + --passfile2 ../../var/pass/secret.tete \ + --folderrec INBOX.Junk --foldersizes --justfolders \ + --usecache --tmpdir /var/tmp --minmaxlinelength 8000 --debugmaxlinelength +} + +ll_maxlinelength_prepa_2() +{ + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 tete@est.belle \ + --passfile1 ../../var/pass/secret.tete \ + --host2 ks.lamiral.info --user2 tata \ + --passfile2 ../../var/pass/secret.tata \ + --ssl2 \ + --include INBOX.Junk.20 --foldersizes --nojustfolders \ + --useuid --tmpdir /var/tmp --minmaxlinelength 10 --delete2 --nofastio1 --nofastio2 +} + + ll_maxsize() { @@ -2046,6 +2082,20 @@ ll_delete_reverse() { --delete --minage 100 --maxage 300 --noexpungeaftereach } +ll_delete_reverse_useuid() { + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 titi \ + --passfile1 ../../var/pass/secret.titi \ + --host2 $HOST2 --user2 tata \ + --passfile2 ../../var/pass/secret.tata \ + --folder INBOX \ + --delete --minage 100 --maxage 300 --noexpungeaftereach \ + --useuid +} + + + + ll_maxmessagespersecond() { ll_delete_reverse $CMD_PERL ./imapsync \ @@ -2964,9 +3014,55 @@ l_office365() --passfile1 ../../var/pass/secret.tata \ --host2 imap-mail.outlook.com --ssl2 --user2 gilles.lamiral@outlook.com \ --passfile2 ../../var/pass/secret.outlook.com \ - --folder INBOX --regextrans2 's/INBOX/tata/' --debugflags + --folder INBOX --tmpdir /var/tmp --usecache --regextrans2 's/INBOX/tata/' --delete2 --expunge2 } +l_office365_bigfolders() +{ + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 tata \ + --passfile1 ../../var/pass/secret.tata \ + --host2 imap-mail.outlook.com --ssl2 --user2 gilles.lamiral@outlook.com \ + --passfile2 ../../var/pass/secret.outlook.com \ + --tmpdir /var/tmp --useuid --include Junk.20 +} + + + +l_office365_maxline() +{ + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 tata \ + --passfile1 ../../var/pass/secret.tata \ + --host2 imap-mail.outlook.com --ssl2 --user2 gilles.lamiral@outlook.com \ + --passfile2 ../../var/pass/secret.outlook.com \ + --tmpdir /var/tmp --usecache --include Junk.2013 --maxlinelength 16000 --debugmaxlinelength +} + +l_office365_maxline_2() +{ + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 tata \ + --passfile1 ../../var/pass/secret.tata \ + --host2 imap-mail.outlook.com --ssl2 --user2 gilles.lamiral@outlook.com \ + --passfile2 ../../var/pass/secret.outlook.com \ + --tmpdir /var/tmp --usecache \ + --folder INBOX --regextrans2 's/INBOX/tata/' \ + --minmaxlinelength 8000 --debugmaxlinelength +} + +# Only available on ks2 (filtered by a firewall) +l_exchange_maxline() +{ + $CMD_PERL ./imapsync \ + --host1 $HOST1 --user1 tata \ + --passfile1 ../../var/pass/secret.tata \ + --host2 correu.quopiam.com --ssl2 --user2 utest@quopiam.com \ + --passfile2 ../../var/pass/secret.quopiam.com \ + --tmpdir /var/tmp --usecache \ + --folder INBOX --regextrans2 's/INBOX/longlines/' \ + --minmaxlinelength 10000 --maxlinelength 11000 --debugmaxlinelength +} ########################## # specific tests @@ -3431,8 +3527,8 @@ big_folder() --passfile1 ../../var/pass/secret.gilles_mbox \ --host2 $HOST2 --user2 tete@est.belle \ --passfile2 ../../var/pass/secret.tete \ - --folder INBOX.Junk.2010 \ - --useheader Message-ID || \ + --include INBOX.Junk.20 \ + --usecache --tmpdir /var/tmp || \ true } date2=`date` @@ -3447,8 +3543,8 @@ big_folder_useuid() --passfile1 ../../var/pass/secret.gilles_mbox \ --host2 $HOST2 --user2 tete@est.belle \ --passfile2 ../../var/pass/secret.tete \ - --folder INBOX.Junk.2011 --nofoldersizes \ - --useuid --tmpdir /var/tmp || \ + --include INBOX.Junk.20 --foldersizes \ + --useuid --tmpdir /var/tmp --delete2 || \ true } date2=`date`