This commit is contained in:
Nick Bebout 2014-11-19 16:08:41 -06:00
parent 2e764e7987
commit dc5f6a1605
30 changed files with 1161 additions and 910 deletions

1
.gitignore vendored
View file

@ -6,3 +6,4 @@ debian/*.subvars
debian/*/*/* debian/*/*/*
debian/files debian/files
packaging/*/* packaging/*/*
W/tmp/*

16
CREDITS
View file

@ -1,23 +1,17 @@
#!/bin/cat #!/bin/cat
# $Id: CREDITS,v 1.180 2013/11/15 01:51:58 gilles Exp gilles $ # $Id: CREDITS,v 1.181 2014/09/19 19:46:35 gilles Exp gilles $
If you want to make a donation to the author, Gilles LAMIRAL, If you want to make a donation to me, imapsync author, Gilles LAMIRAL,
use any of the following ways: use any of the following ways:
a) you can use the imapsync wishlist :
http://www.amazon.com/gp/registry/wishlist/1C9UNDIH3P7R7/
(Use the lowest postal cost)
b) If you can read french, please use the following wishlist : b) If you can read french, please use the following wishlist :
http://amazon.fr/gp/registry/wishlist/37RZF7PPCD7YL http://amazon.fr/gp/registry/wishlist/37RZF7PPCD7YL
(books will be send with free postal cost) (books will be send with free postal cost)
c) its paypal account : gilles.lamiral@laposte.net c) my paypal account is gilles.lamiral@laposte.net
http://www.linux-france.org/prj/imapsync/paypal.shtml http://imapsync.lamiral.info/W/paypal.shtml
d) If you prefer making your donation with
cash or cheque then my postal address is:
My postal address is:
Gilles LAMIRAL Gilles LAMIRAL
La Billais La Billais
35580 Baulon 35580 Baulon

View file

@ -1,17 +1,34 @@
RCS file: RCS/imapsync,v RCS file: RCS/imapsync,v
Working file: imapsync Working file: imapsync
head: 1.592 head: 1.596
branch: branch:
locks: strict locks: strict
gilles: 1.592 gilles: 1.596
access list: access list:
symbolic names: symbolic names:
keyword substitution: kv keyword substitution: kv
total revisions: 592; selected revisions: 592 total revisions: 596; selected revisions: 596
description: description:
---------------------------- ----------------------------
revision 1.592 locked by: gilles; revision 1.596 locked by: gilles;
date: 2014/09/04 17:17:36; author: gilles; state: Exp; lines: +11 -6
Added --logfile in help output.
Added --nolog in help output.
----------------------------
revision 1.595
date: 2014/09/01 19:39:16; author: gilles; state: Exp; lines: +7 -7
Changed output, no examine anymore, only select.
----------------------------
revision 1.594
date: 2014/08/16 22:40:02; author: gilles; state: Exp; lines: +14 -9
Fixed "imapsync doesn't see created folders in stats phase". Second time.
----------------------------
revision 1.593
date: 2014/07/08 11:19:43; author: gilles; state: Exp; lines: +18 -7
Added --nomixdiffcasefolders to avoid merging folders that are considered different on host1 but the same on destination host2 because of case sensitivities and insensitivities.
----------------------------
revision 1.592
date: 2014/05/22 10:03:17; author: gilles; state: Exp; lines: +23 -12 date: 2014/05/22 10:03:17; author: gilles; state: Exp; lines: +23 -12
Bugfix. Make TLS works with last IO::Socket::SSL default value (SSL_verify_mode => 'SSL_VERIFY_NONE') in tls. Bugfix. Make TLS works with last IO::Socket::SSL default value (SSL_verify_mode => 'SSL_VERIFY_NONE') in tls.
---------------------------- ----------------------------

169
FAQ
View file

@ -1,5 +1,5 @@
#!/bin/cat #!/bin/cat
# $Id: FAQ,v 1.175 2014/05/21 01:20:20 gilles Exp gilles $ # $Id: FAQ,v 1.186 2014/09/06 07:39:40 gilles Exp gilles $
+------------------+ +------------------+
| FAQ for imapsync | | FAQ for imapsync |
@ -48,6 +48,9 @@ like on Unix so in the examples of this FAQ the
command containing single quotes ' will fail on Windows. command containing single quotes ' will fail on Windows.
To fix it just replace single quotes ' by double quotes " To fix it just replace single quotes ' by double quotes "
Also on Windows, in examples with \$1 replace
any \$1 by $1 (remove the \ before $).
======================================================================= =======================================================================
Q. How to verify imapsync.exe I got is the right file bit per bit? Q. How to verify imapsync.exe I got is the right file bit per bit?
@ -320,25 +323,23 @@ R. This comes from a Windows limitation on pathnames.
No more than 260 characters are allowed for pathnames. No more than 260 characters are allowed for pathnames.
See more details on page See more details on page
http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx#maxpath http://msdn.microsoft.com/en-us/library/windows/desktop/aa365247.aspx#maxpath
The workaround solution given at the previous link,
ie using \\?\D:", does not work for imapsync.
So this imapsync Windows bug is still pending and needs a fix using
a different technic to cache, like a database file for example.
Two workarounds to reduce the cache directory name: A solution to fix the issue is to use a Linux virtual host on a
Windows box, with VirtualBox or VmWare etc. There is no bug this way,
pathnames can be several thousands charaters long.
Better said that done but not so difficult nor expensive these days,
VirtualBox is free and VmWare Player is free for personal or test use.
1) Use --tmpdir "D:\\temp" or simply --tmpdir "D:" If you have to stick on Windows, there are two good workarounds
to reduce the cache directory name:
Currently (until 1.568) there is a bug with --tmpdir "D:\\temp" or "D:". 1) Use --tmpdir "D:\\temp" or simply --tmpdir "D:" and imapsync
Since character : is forbidden in Windows paths the directory is transform will build and use the cache in the sub directory
to convert those characters and others () to character _ D:\imapsync_cache\
So "D:\\temp" becomes "D_\\temp".
A fix is to change to D: before running imapsync and use --tmpdir "."
like this in a batch file:
D:
cd \
cd .\temp
%~dp0\imapsync.exe ... --tmpdir "."
This bug should be fixed in release 1.569
2) add two equivalent entries in the etc/hosts for host1 imap.truc.org 2) add two equivalent entries in the etc/hosts for host1 imap.truc.org
and host2 imap.trac.org. and host2 imap.trac.org.
@ -406,7 +407,7 @@ Q. I get "Out of memory" errors. How to fix that?
R. Usually "Out of memory" errors are related to old days, R. Usually "Out of memory" errors are related to old days,
to old Mail::IMAPClient module releases, before 3.26. to old Mail::IMAPClient module releases, before 3.26.
Look at imapsync output first lines to get the Mail::IMAPClient release used. Look at imapsync output first lines to get the Mail::IMAPClient release used.
Then upgrade Mail::IMAPClient Perl module. Then upgrade Mail::IMAPClient Perl module if needed.
======================================================================= =======================================================================
Q. Can I use imapsync to migrate emails from pop3 server to imap server? Q. Can I use imapsync to migrate emails from pop3 server to imap server?
@ -547,7 +548,7 @@ have a uniq numeric criteria.
There is always a limit, depending on remote imap servers There is always a limit, depending on remote imap servers
and the one running imapsync; and the one running imapsync;
CPU, memory, Inputs/Outputs are the classical bottlenecks, CPU, memory, Inputs/Outputs are the classical bottlenecks,
the worst is the winner that sets the limit. the worst bottleneck is the winner that sets the limit.
examples/sync_loop_windows.bat says examples/sync_loop_windows.bat says
... ...
@ -640,6 +641,8 @@ It'll convert / character to X
Choose X as you wish: _ or SEP or Choose X as you wish: _ or SEP or
any string (including the empty string). any string (including the empty string).
This issue is automatically fixed by default since imapsync
release 1.513, use --nofixslash2 to suppress the fix.
======================================================================= =======================================================================
Q. Is it possible to sync also the UIDL of the POP3 server? Q. Is it possible to sync also the UIDL of the POP3 server?
@ -868,10 +871,21 @@ does with flags.
======================================================================= =======================================================================
Q. How to fix this error: BAD Invalid system flag \FORWARDED Q. How to fix this error: BAD Invalid system flag \FORWARDED
R. Filter flag \FORWARDED with R. Filter flag \FORWARDED with --regexflag like this:
On Windows:
imapsync ... --regexflag "s/\\FORWARDED//g" imapsync ... --regexflag "s/\\FORWARDED//g"
On Unix:
imapsync ... --regexflag 's/\\FORWARDED//g'
or
imapsync ... --regexflag "s/\\\\FORWARDED//g"
======================================================================= =======================================================================
Q. How to convert flags with $ to \ character? Q. How to convert flags with $ to \ character?
@ -986,15 +1000,6 @@ R. May be spending too much time on the source server, the connection
timed out on the destination server. timed out on the destination server.
Try options --nofoldersizes Try options --nofoldersizes
=======================================================================
Q. imapsync failed with a "word too long" error from the imap server,
What can I do?
R. Use imapsync release 1.172 or at least 1.166 with options
--split1 500 --split2 500
or a old old imapsync (before 1.94)
======================================================================= =======================================================================
Q. Does imapsync support IMAP TLS? Q. Does imapsync support IMAP TLS?
@ -1026,6 +1031,30 @@ b) Use stunnel
then use imapsync on localhost (or bar machine) imap (143) port. then use imapsync on localhost (or bar machine) imap (143) port.
If the local port 143 is already taken then use a free one, 10143. If the local port 143 is already taken then use a free one, 10143.
c) Other example for gmail with no root access to open port 143
stunnel -f -P '' -c -d 9993 -r imap.gmail.com:993
Then, to access gmail as host2 use:
imapsync ... --host2 localhost --port2 9993 --nossl2
=======================================================================
Q. How can I manually test a login via ssl?
R. Use ncat or telnet-ssl like in this example:
ncat --ssl -C imap.gmail.com 993
* OK Gimap ready for requests from 78.196.254.58 q1mb175739668wix
a LOGIN "gilles.lamiral@gmail.com" "secret"
* CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE ... ESEARCH
a OK gilles.lamiral@gmail.com Gilles Lamiral authenticated (Success)
b LOGOUT
* BYE LOGOUT Requested
b OK 73 good day (Success)
The client part to type is "a LOGIN ..." and "b LOGOUT" without
the double-quotes.
======================================================================= =======================================================================
Q. On windows ssl use to work with imapsync.exe 1.536 or previous then Q. On windows ssl use to work with imapsync.exe 1.536 or previous then
@ -1053,16 +1082,6 @@ b) or use stunnel :
c) or use stunnel on inetd c) or use stunnel on inetd
imaps stream tcp nowait cyrus /usr/sbin/stunnel -s cyrus -p /etc/ssl/certs/imapd.pem -r localhost:imap2 imaps stream tcp nowait cyrus /usr/sbin/stunnel -s cyrus -p /etc/ssl/certs/imapd.pem -r localhost:imap2
=======================================================================
Q: I'm trying to use imapsync on win32 for gmail and it requires ssl.
Imapsync appears to require IO::Socket::SSL. What can I do?
R1: use standalone imapsync.exe, it contains IO::Socket::SSL
Perl module embedded.
R2: Module IO::Socket::SSL is available on Win32
with Strawberry Perl.
======================================================================= =======================================================================
Q: Multiple copies when I run imapsync twice ore more. Q: Multiple copies when I run imapsync twice ore more.
@ -1294,7 +1313,7 @@ Note from Yago Torres Fernandez:
(a working command using admin/authuser on host2 Office 365) (a working command using admin/authuser on host2 Office 365)
imapsync ... --authuser2 user_admin@domain.com --user2 user_to_be_migrated@domain.com ^ imapsync ... --authuser2 user_admin@domain.com --user2 user_to_be_migrated@domain.com ^
--password2 XXXX --ssl2 --exclude "Shared Folders" ^ --password2 XXXX --ssl2 --ssl2_SSL_version SSLv3 --exclude "Shared Folders" ^
--regextrans2 "s#Trash$#Papelera#" --regextrans2 "s#^Deleted Items$#Papelera#" --regextrans2 "s#Trash$#Papelera#" --regextrans2 "s#^Deleted Items$#Papelera#"
but previous in Office365 you must do something like that, using powershell: but previous in Office365 you must do something like that, using powershell:
@ -1304,11 +1323,21 @@ but previous in Office365 you must do something like that, using powershell:
====================================================================== ======================================================================
Q. How to migrate from uw-imap with an admin/authuser account? Q. How to migrate from uw-imap with an admin/authuser account?
R. Use R. Use the following syntax:
--user1="user*admin_user" --password1 "admin_user_password" imapsync ... --user1="loginuser*admin_user" --password1 "admin_user_password"
======================================================================
Q. How to migrate to Dovecot with an admin/MasterUser account?
R. Dovecot uses the same syntax as uw-imap
imapsync ... --user2="loginuser*admin_user" --password2 "admin_user_password"
To setup a Dovecot MasterUser see
http://wiki2.dovecot.org/Authentication/MasterUsers
====================================================================== ======================================================================
Q. How to migrate from cyrus with an admin account? Q. How to migrate from cyrus with an admin account?
@ -1327,6 +1356,11 @@ Do not forget the option --ssl1 since PLAIN auth is only
supported with ssl encryption most of the time. But it can supported with ssl encryption most of the time. But it can
work without --ssl1 if PLAIN is permitted in normal use. work without --ssl1 if PLAIN is permitted in normal use.
Add the AdminAccount to admins line in /etc/imapd.conf
Give AdminAccount lrswipkxtecda to the Cyrus Imap account
being migrated from, "joe" here.
Here is an example: Here is an example:
imapsync \ imapsync \
--host1 server1 \ --host1 server1 \
@ -1415,6 +1449,10 @@ imapsync \
--regextrans2 "s/INBOX(.*)/INBOX.Braunschweig\$1/" \ --regextrans2 "s/INBOX(.*)/INBOX.Braunschweig\$1/" \
--dry --justfolders --dry --justfolders
On Windows, in the previous example containing \$1 you have to
replace the two \$1 by $1 (remove the \ before $).
2) See if the output says everything you want imapsync to do, 2) See if the output says everything you want imapsync to do,
--dry option is safe and does nothing real. --dry option is safe and does nothing real.
@ -1601,6 +1639,16 @@ R. Here is a command line resume that solves most encountered issues when
migrating to Exchange or Office365. To understand or change the migrating to Exchange or Office365. To understand or change the
details you have to read next Q/R sections. details you have to read next Q/R sections.
For Office365 you also have to add --ssl2 --ssl2_SSL_version SSLv3
if Office365 is host2 (or --ssl1 if Office365 is host1)
imapsync ... --ssl2 --ssl2_SSL_version SSLv3
or
imapsync ... --ssl1 --ssl1_SSL_version SSLv3
On Windows: On Windows:
imapsync ... ^ imapsync ... ^
@ -1721,6 +1769,7 @@ imapsync --host1 mail.oldhost.com \
--password2 password \ --password2 password \
--ssl2 \ --ssl2 \
--exitwhenover 500000000 \ --exitwhenover 500000000 \
--maxsize 25000000 \
--addheader \ --addheader \
--exclude "\[Gmail\]$" \ --exclude "\[Gmail\]$" \
--regextrans2 "s/[ ]+/_/g" \ --regextrans2 "s/[ ]+/_/g" \
@ -1740,6 +1789,11 @@ 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 know the hard value, it seems to vary, so just have some tries
and report me what you discover in case you detect something. and report me what you discover in case you detect something.
--maxsize 25000000 is mandatory since Gmail limits messages size
up to 25 MB. This value increases over time, it was 10 MB some
years ago so you can try higher values. The Gmail page about
this limit is https://support.google.com/mail/answer/6584
The --addheader option is there because "Sent" folder messages The --addheader option is there because "Sent" folder messages
sometimes lack the "Message-Id:" and "Received:" headers needed sometimes lack the "Message-Id:" and "Received:" headers needed
by imapsync to identify messages (only when --useuid is not used). by imapsync to identify messages (only when --useuid is not used).
@ -1760,6 +1814,9 @@ If you want to change only leading and trailing blank characters
then use instead: then use instead:
--regextrans2 "s,(/|^) +,\$1,g" --regextrans2 "s, +(/|$),\$1,g" --regextrans2 "s,(/|^) +,\$1,g" --regextrans2 "s, +(/|$),\$1,g"
On Windows, in the previous example containing \$1 you have to
replace the two \$1 by $1 (remove the \ before $1).
--regextrans2 "s/[\^]/_/g" is mandatory. It converts, since --regextrans2 "s/[\^]/_/g" is mandatory. It converts, since
not accepted by gmail, character ^ to character _ underscore. not accepted by gmail, character ^ to character _ underscore.
@ -1832,7 +1889,7 @@ and report me what you discover in case you detect something.
mandatory. I use them because I found (several years ago, it may mandatory. I use them because I found (several years ago, it may
have changed) that Gmail always adds a different header have changed) that Gmail always adds a different header
"X-Gmail-Received:" to all messages it gets. So the identification "X-Gmail-Received:" to all messages it gets. So the identification
by imapsync can not fall using this header. "Message-Id" is there by imapsync can not fail using this header. "Message-Id" is there
for safety about this Gmail rule. for safety about this Gmail rule.
@ -1841,7 +1898,7 @@ option:
--regextrans2 's/\[Gmail\]/Gmail/' --regextrans2 's/\[Gmail\]/Gmail/'
You can select folders exported to imap within the gmail preferences, You can select folders exported to imap within the gmail preferences,
unselect all "System labels". for example you may unselect all "System labels".
--exitwhenover option is here to avoid locking when transfers --exitwhenover option is here to avoid locking when transfers
exceed maximum limit. exceed maximum limit.
@ -1849,7 +1906,7 @@ See http://support.google.com/a/bin/answer.py?hl=en&answer=1071518
--skipcrossduplicates is optional but it can save Gigabytes of hard --skipcrossduplicates is optional but it can save Gigabytes of hard
disk memory. Within imap protocol, Gmail presents Gmail labels as disk memory. Within imap protocol, Gmail presents Gmail labels as
folders so a message labeled "Work" "ProjectX" "Urgent" ends up folders, so a message labeled "Work" "ProjectX" "Urgent" ends up
in three different imap folders "Work" "ProjectX" and "Urgent" in three different imap folders "Work" "ProjectX" and "Urgent"
after an imap sync. --skipcrossduplicates prevent this behavior. after an imap sync. --skipcrossduplicates prevent this behavior.
@ -1868,6 +1925,15 @@ label CanWait and only it.
--skipcrossduplicates, will only put in "[Gmail]/All Mail" --skipcrossduplicates, will only put in "[Gmail]/All Mail"
the messages that are not labeled at all. the messages that are not labeled at all.
=======================================================================
Q. Does imapsync have the capability to do 2 stage authentication for google.
No, imapsync doesn't support 2 stage authentication.
Reading https://support.google.com/mail/answer/1173270?hl=en
it looks like it can't because imapsync uses imap protocol.
So you have to follow the Google recommendation and generate an
application-specific password or normal authentication or XOAUTH.
======================================================================= =======================================================================
Q. How to use XOAUTH to globally authenticate gmail users? Q. How to use XOAUTH to globally authenticate gmail users?
@ -2087,7 +2153,7 @@ I encounter many errors like this:
R. GroupWise 7 seems buggy. Apply GroupWise 7 support pack 1 R. GroupWise 7 seems buggy. Apply GroupWise 7 support pack 1
======================================================================= =======================================================================
Q. Migrating from David Tobit V10 Q. Migrating from David Tobit V10 (DvISE Mail Access Server MA-...)
R. Use the following options: R. Use the following options:
@ -2096,6 +2162,7 @@ imapsync ... --prefix1 "" --sep1 / --idatefromheader ^
======================================================================= =======================================================================
Q. Migrating from David Tobit V8 Q. Migrating from David Tobit V8
("* OK IMAP4rev1 DvISE Mail Access Server MA-8.10a (0126)")
First try above V10 solution since improvments have been made First try above V10 solution since improvments have been made
to support Tobit. to support Tobit.
@ -2115,7 +2182,6 @@ http://www.linux-france.org/prj/imapsync_list/msg00582.html
http://www.linux-france.org/prj/imapsync_list/threads.html#00582 http://www.linux-france.org/prj/imapsync_list/threads.html#00582
patch saved in ./patches/imapsync-1.337_tobit_V6.patch patch saved in ./patches/imapsync-1.337_tobit_V6.patch
======================================================================= =======================================================================
Q. I need to migrate 1250 mailboxes, passwords are in a MySQL Database. Q. I need to migrate 1250 mailboxes, passwords are in a MySQL Database.
Can you tell me if your script suits my needs? Can you tell me if your script suits my needs?
@ -2227,10 +2293,13 @@ Here is a command line used to migrate from FirtClass release 12:
--regextrans2 "s/[\^]/_/g" \ --regextrans2 "s/[\^]/_/g" \
--regextrans2 "s/['\"\\\\]/_/g" \ --regextrans2 "s/['\"\\\\]/_/g" \
--regextrans2 "s,&AC8-,-,g" \ --regextrans2 "s,&AC8-,-,g" \
--regextrans2 "s,&APg-,oe,g" \ --regextrans2 "s,&APg-,oe,g"
--noabletosearch
Special thanks to Kristian Wind for helping me to write this FAQ item. On Windows, in the previous example containing \$1 you have to
replace the two \$1 by $1 (remove the \ before $).
Special thanks to Kristian Wind and Joey Alexander for helping me
writing this FAQ item.
See also this worth reading discussion in a Zimbra forum: See also this worth reading discussion in a Zimbra forum:
http://www.zimbra.com/forums/migration/20349-help-needed-migrating-firstclass.html http://www.zimbra.com/forums/migration/20349-help-needed-migrating-firstclass.html

View file

@ -1,4 +1,4 @@
# $Id: INSTALL,v 1.38 2014/05/29 23:42:11 gilles Exp gilles $ # $Id: INSTALL,v 1.39 2014/09/19 19:37:08 gilles Exp gilles $
# #
# INSTALL file for imapsync # INSTALL file for imapsync
# imapsync : IMAP sync and migrate tool. # imapsync : IMAP sync and migrate tool.
@ -118,6 +118,11 @@ On Debian/Ubuntu:
aptitude install libfile-copy-recursive-perl # File::Copy::Recursive aptitude install libfile-copy-recursive-perl # File::Copy::Recursive
aptitude install libio-tee-perl # IO::Tee aptitude install libio-tee-perl # IO::Tee
On Ubuntu 14 (thanks to http://www.jverdeyen.be/ubuntu/imapsync-on-ubuntu/):
sudo apt-get install makepasswd rcs perl-doc libio-tee-perl git
sudo apt-get install libmail-imapclient-perl libdigest-md5-file-perl libterm-readkey-perl libfile-copy-recursive-perl
On Mandriva: On Mandriva:
urpmi perl-Mail-IMAPClient # Mail::IMAPClient urpmi perl-Mail-IMAPClient # Mail::IMAPClient

View file

@ -1,5 +1,5 @@
# $Id: Makefile,v 1.149 2014/05/29 23:41:53 gilles Exp gilles $ # $Id: Makefile,v 1.151 2014/09/21 08:35:07 gilles Exp gilles $
.PHONY: help usage all .PHONY: help usage all
@ -21,6 +21,7 @@ usage:
@echo "make .prereq_win32 # run examples/install_modules.bat on win32" @echo "make .prereq_win32 # run examples/install_modules.bat on win32"
@echo "make all " @echo "make all "
@echo "make upload_index" @echo "make upload_index"
@echo "make valid_index # check index.shtml for good syntax"
@echo "make upload_ks" @echo "make upload_ks"
@echo "make imapsync.exe" @echo "make imapsync.exe"
@echo "make imapsync_elf_x86.bin" @echo "make imapsync_elf_x86.bin"
@ -60,11 +61,11 @@ VERSION: imapsync
perl -I./$(IMAPClient) ./imapsync --version > ./VERSION perl -I./$(IMAPClient) ./imapsync --version > ./VERSION
touch -r ./imapsync ./VERSION touch -r ./imapsync ./VERSION
GOOD_PRACTICES.html: GOOD_PRACTICES.t2t GOOD_PRACTICES.html: W/GOOD_PRACTICES.t2t
txt2tags -i GOOD_PRACTICES.t2t -t html --toc -o GOOD_PRACTICES.html txt2tags -i W/GOOD_PRACTICES.t2t -t html --toc -o GOOD_PRACTICES.html
TUTORIAL.html: TUTORIAL.t2t TUTORIAL.html: W/TUTORIAL.t2t
txt2tags -i TUTORIAL.t2t -t html --toc -o TUTORIAL.html txt2tags -i W/TUTORIAL.t2t -t html --toc -o TUTORIAL.html
doc: README ChangeLog TUTORIAL.html GOOD_PRACTICES.html doc: README ChangeLog TUTORIAL.html GOOD_PRACTICES.html
@ -119,16 +120,16 @@ cidone:
.PHONY: test tests testp testf test3xx testv3 perlcritic .PHONY: test tests testp testf test3xx testv3 perlcritic
perlcritic: perlcritic_3.out perlcritic_2.out perlcritic: W/perlcritic_3.out W/perlcritic_2.out
perlcritic_1.out: imapsync W/perlcritic_1.out: imapsync
perlcritic -1 imapsync > perlcritic_1.out || : perlcritic -1 imapsync > W/perlcritic_1.out || :
perlcritic_2.out: imapsync W/perlcritic_2.out: imapsync
perlcritic -2 imapsync > perlcritic_2.out || : perlcritic -2 imapsync > W/perlcritic_2.out || :
perlcritic_3.out: imapsync W/perlcritic_3.out: imapsync
perlcritic -3 imapsync > perlcritic_3.out || : perlcritic -3 imapsync > W/perlcritic_3.out || :
test_quick : test_quick_3xx test_quick : test_quick_3xx
@ -320,7 +321,7 @@ README_dist.txt: dist_dir
sh W/tools/gen_README_dist > $(DIST_PATH)/README_dist.txt sh W/tools/gen_README_dist > $(DIST_PATH)/README_dist.txt
unix2dos $(DIST_PATH)/README_dist.txt unix2dos $(DIST_PATH)/README_dist.txt
.PHONY: publish upload_ks ks .PHONY: publish upload_ks ks valid_index
ks: ks:
rsync -avHz --delete --exclude imapsync.exe \ rsync -avHz --delete --exclude imapsync.exe \
@ -374,6 +375,8 @@ upload_lfo:
/home/gilles/public_html/www.linux-france.org/html/prj/imapsync/.htaccess /home/gilles/public_html/www.linux-france.org/html/prj/imapsync/.htaccess
sh ~/memo/lfo-rsync sh ~/memo/lfo-rsync
valid_index: .valid.index.shtml
.valid.index.shtml: index.shtml .valid.index.shtml: index.shtml
tidy -q index.shtml> /dev/null tidy -q index.shtml> /dev/null
@ -383,6 +386,6 @@ upload_lfo:
upload_index: .valid.index.shtml FAQ LICENSE CREDITS TUTORIAL.html GOOD_PRACTICES.html W/*.bat examples/*.bat examples/*.sh upload_index: .valid.index.shtml FAQ LICENSE CREDITS TUTORIAL.html GOOD_PRACTICES.html W/*.bat examples/*.bat examples/*.sh
rcsdiff index.shtml FAQ LICENSE CREDITS W/*.bat examples/*.bat index.shtml rcsdiff index.shtml FAQ LICENSE CREDITS W/*.bat examples/*.bat index.shtml
rsync -avH index.shtml FAQ NOLIMIT LICENSE CREDITS TUTORIAL.html GOOD_PRACTICES.html root@ks.lamiral.info:/var/www/imapsync/ rsync -avH index.shtml FAQ NOLIMIT LICENSE CREDITS TUTORIAL.html GOOD_PRACTICES.html root@ks.lamiral.info:/var/www/imapsync/
rsync -avH W/*.bat root@ks.lamiral.info:/var/www/imapsync/W/ rsync -avH W/*.bat ./W/style.css W/fb-like.html ./W/fb-root.js W/tw-hash.html root@ks.lamiral.info:/var/www/imapsync/W/
rsync -avH examples/*.bat examples/*.sh root@ks.lamiral.info:/var/www/imapsync/examples/ rsync -avH examples/*.bat examples/*.sh root@ks.lamiral.info:/var/www/imapsync/examples/

7
README
View file

@ -4,7 +4,7 @@ NAME
More than 52 different IMAP server softwares supported with success, few More than 52 different IMAP server softwares supported with success, few
failures. failures.
$Revision: 1.592 $ $Revision: 1.596 $
SYNOPSIS SYNOPSIS
To synchronize imap account "foo" on "imap.truc.org" to imap account To synchronize imap account "foo" on "imap.truc.org" to imap account
@ -99,6 +99,9 @@ USAGE
[--releasecheck] [--releasecheck]
[--pidfile <filepath>] [--pidfile <filepath>]
[--tmpdir <dirpath>] [--tmpdir <dirpath>]
[--nolog]
[--log]
[--logfile <filepath>]
[--version] [--help] [--version] [--help]
[--tests] [--tests_debug] [--tests] [--tests_debug]
@ -483,5 +486,5 @@ SIMILAR SOFTWARES
Feedback (good or bad) will often be welcome. Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.592 2014/05/22 10:03:17 gilles Exp gilles $ $Id: imapsync,v 1.596 2014/09/04 17:17:36 gilles Exp gilles $

View file

@ -1 +1 @@
1.592 1.596

View file

@ -1 +1 @@
1.592 1.596

View file

@ -287,3 +287,9 @@
1401227679 BEGIN 1.592 : mardi 27 mai 2014, 23:54:39 (UTC+0200) 1401227679 BEGIN 1.592 : mardi 27 mai 2014, 23:54:39 (UTC+0200)
1401262215 END 1.592 : mercredi 28 mai 2014, 09:30:15 (UTC+0200) 1401262215 END 1.592 : mercredi 28 mai 2014, 09:30:15 (UTC+0200)
1401407642 BEGIN 1.592 : vendredi 30 mai 2014, 01:54:02 (UTC+0200) 1401407642 BEGIN 1.592 : vendredi 30 mai 2014, 01:54:02 (UTC+0200)
1401410706 BEGIN 1.592 : vendredi 30 mai 2014, 02:45:07 (UTC+0200)
1401411830 END 1.592 : vendredi 30 mai 2014, 03:03:50 (UTC+0200)
1411192222 BEGIN 1.596 : samedi 20 septembre 2014, 07:50:22 (UTC+0200)
1411228014 BEGIN 1.596 : samedi 20 septembre 2014, 17:46:54 (UTC+0200)
1411266788 BEGIN 1.596 : dimanche 21 septembre 2014, 04:33:08 (UTC+0200)
1411267953 END 1.596 : dimanche 21 septembre 2014, 04:52:33 (UTC+0200)

9
W/fb-like.html Normal file
View file

@ -0,0 +1,9 @@
<div
class="fb-like"
data-href="https://www.facebook.com/imapsync"
data-layout="standard"
data-action="like"
data-show-faces="true"
data-share="true"
>
</div>

9
W/fb-root.js Normal file
View file

@ -0,0 +1,9 @@
(function(d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) return;
js = d.createElement(s); js.id = id;
js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.0";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

View file

@ -1,4 +1,4 @@
m4_dnl $Id: ml_announce.in,v 1.6 2012/12/24 10:35:38 gilles Exp gilles $ m4_dnl $Id: ml_announce.in,v 1.7 2014/05/30 01:39:23 gilles Exp gilles $
m4_dnl m4_dnl
m4_define(`M4_imapsync_VERSION',m4_esyscmd(cat VERSION|tr -d '\n'))m4_dnl m4_define(`M4_imapsync_VERSION',m4_esyscmd(cat VERSION|tr -d '\n'))m4_dnl
m4_define(`M4_SECRET_PATH',m4_esyscmd(cat dist/path_last.txt|tr -d '\n'))m4_dnl m4_define(`M4_SECRET_PATH',m4_esyscmd(cat dist/path_last.txt|tr -d '\n'))m4_dnl
@ -22,7 +22,7 @@ http://imapsync.lamiral.info/dist/M4_SECRET_PATH/
Three files are there: Three files are there:
- imapsync is directly the perl script (also found in the tarball) for a fast upgrade. - imapsync is directly the perl script (also found in the tarball) for a fast upgrade.
- imapsync-M4_imapsync_VERSION.tgz is the tarball containing everything of the project (maybe too much) - imapsync-M4_imapsync_VERSION.tgz is the tarball containing everything of the project (maybe too much)
- imapsync.exe is the win32 standalone binary. - imapsync.M4_imapsync_VERSION.zip is the win32 zip archive including standalone binary imapsync.exe.
What's new in this M4_imapsync_VERSION release can be found at What's new in this M4_imapsync_VERSION release can be found at
http://imapsync.lamiral.info/#latest http://imapsync.lamiral.info/#latest

View file

@ -0,0 +1,68 @@
--- imapsync 2014-08-12 15:23:24.000000000 +0000
+++ imapsync.kerio 2014-09-02 08:47:07.560989980 +0000
@@ -1053,8 +1053,8 @@
$debug and print "Host2 Buffer I/O: ", $imap2->Buffer(), "\n";
-
-die_clean( 'Not authenticated on host1' ) unless $imap1->IsAuthenticated( ) ;
+# FIXME no time for a proper change, but just assume, that the imapsync is correctly corrected to Kerio
+#die_clean( 'Not authenticated on host1' ) unless $imap1->IsAuthenticated( ) ;
print "Host1: state Authenticated\n";
die_clean( 'Not authenticated on host2' ) unless $imap2->IsAuthenticated( ) ;
print "Host2: state Authenticated\n";
@@ -2129,6 +2129,36 @@
}
}
+ if ( $authmech eq 'KERIO' ) {
+ # send the string 'X-MASTERAUTH'
+ my @return = $imap->tag_and_run("X-MASTERAUTH", "+") ;
+ # receive a challenge
+ my $challenge ;
+ foreach my $line ( @return ) {
+ if ($line =~ /^\+\ .*/) {
+ $challenge = $line ;
+ }
+ }
+ # strip carriage return and newline characters
+ $/ = "\r\n" ;
+ chomp($challenge) ;
+ $/ = "\n" ;
+ # strip the challenge and return it for debuging
+ $challenge = substr($challenge, 2) ;
+ printf("%s: Challenge is '%s'\n", $Side, $challenge ) ;
+ # of the masterpassword, Kerio accepts only the first 24 characters
+ $challenge .= substr($password,0,24) ;
+ # create an md5sum of the master password
+ my $md5pass = md5_hex($challenge) ;
+ # show the challenge response and send it to the server
+ printf("%s: MD5 of Challenge Response is '%s'\n", $Side, $md5pass ) ;
+ my $sock = $imap->Socket() ;
+ printf("%s", $sock );
+ print $sock "$md5pass\r\n" ;
+ # now change the user to the final one
+ $imap->tag_and_run("X-SETUSER $user", "OK") ;
+ }
+
if ( $imap->Tls( ) ) {
set_tls( $imap ) ;
$imap->starttls( )
@@ -2156,7 +2186,7 @@
$imap->Authmechanism("") ;
$imap->User($authuser) ;
} else {
- $imap->Authmechanism( $authmech ) unless ( $authmech eq 'LOGIN' or $authmech eq 'PREAUTH' ) ;
+ $imap->Authmechanism( $authmech ) unless ( $authmech eq 'LOGIN' or $authmech eq 'PREAUTH' or $authmech eq 'KERIO' ) ;
$imap->User($user) ;
}
@@ -2167,7 +2197,7 @@
$imap->Authuser($authuser) ;
$imap->Password($password) ;
- unless ( $authmech eq 'PREAUTH' or $imap->login( ) ) {
+ unless ( $authmech eq 'PREAUTH' or $authmech eq 'KERIO' or $imap->login( ) ) {
my $info = "Failure: error login on [$host] with user [$user] auth" ;
my $einfo = $imap->LastError || @{$imap->History}[-1] ;
chomp( $einfo ) ;

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: paypal_build_invoices,v 1.71 2014/05/20 20:13:45 gilles Exp gilles $ # $Id: paypal_build_invoices,v 1.76 2014/09/02 23:40:15 gilles Exp gilles $
# usage: sh paypal_build_invoices /g/var/paypal_invoices/???? # usage: sh paypal_build_invoices /g/var/paypal_invoices/????
@ -49,8 +49,13 @@ 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 3163 /g/paypal/paypal_2014_02_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3163 /g/paypal/paypal_2014_02_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3205 /g/paypal/paypal_2014_03_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3205 /g/paypal/paypal_2014_03_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3251 /g/paypal/paypal_2014_04_complet.csv #/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3251 /g/paypal/paypal_2014_04_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3297 /g/paypal/paypal_2014_05_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3351 /g/paypal/paypal_2014_06_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3413 --avoid_numbers '3450 3451' /g/paypal/paypal_2014_07_complet.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3450 /g/paypal/virements_2014_07.csv
#/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3475 /g/paypal/paypal_2014_08_complet.csv
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3297 /g/paypal/paypal_2014_05_complet.csv /g/public_html/imapsync/W/paypal_reply/paypal_bilan --write_invoices --first_in 3538 /g/paypal/paypal_2014_09_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 147 /g/paypal/paypal_2010_11_complet.csv
@ -95,35 +100,50 @@ 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 3163 /g/paypal/paypal_2014_02_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3163 /g/paypal/paypal_2014_02_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3205 /g/paypal/paypal_2014_03_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3205 /g/paypal/paypal_2014_03_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3251 /g/paypal/paypal_2014_04_complet.csv : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3251 /g/paypal/paypal_2014_04_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3297 /g/paypal/paypal_2014_05_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3351 /g/paypal/paypal_2014_06_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3413 --avoid_numbers '3450 3451' /g/paypal/paypal_2014_07_complet.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3450 /g/paypal/virements_2014_07.csv
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3475 /g/paypal/paypal_2014_08_complet.csv
set -x set -x
/g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3297 /g/paypal/paypal_2014_05_complet.csv /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 3538 /g/paypal/paypal_2014_09_complet.csv
set +x set +x
# La totale # La totale
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan --bnc --debug \
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 --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 1330 1331 1332 1333 1334 1652 1653 2131 2132
2625 2626 2970 2971 2972 3093 3296' \ 2295 2296 2297 2298 2625 2626 2970 2971 2972
3093 3296 3411 3412 3450 3451' \
/g/paypal/paypal_201?_??_complet.csv /g/paypal/paypal_201?_??_complet.csv
set -v #set -v
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 147 --avoid_numbers '292 293 643 644 731 732 1093 --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 1330 1331 1332 1333 1334 1652 1653 2131 2132
2625 2626 2970 2971 2972 3093 3296' \ 2295 2296 2297 2298 2625 2626 2970 2971 2972
3093 3296 3411 3412 3450 3451' \
/g/paypal/paypal_201?_??_complet.csv /g/paypal/paypal_201?_??_complet.csv
set +v #set +v
#echo 2012 # echo 2010 : 145 ( from 147 to 291 ) EUR 3836.38
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan --first_in 147 --avoid_numbers '' /g/paypal/paypal_2010_??_complet.csv
# echo 2011 : 1031 ( from 294 to 1329 ) EUR 30983.02
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 292 --avoid_numbers '292 293 643 644 731 732 1093' \
/g/paypal/paypal_2011_??_complet.csv
#echo 2012 : 956 ( from 1335 to 2294 ) EUR 37872.00
#set -v #set -v
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 1335 --usdeur 1.2952 --avoid_numbers '1652 1653 2131 2132 2295 2296 2297 2298' \ --first_in 1335 --usdeur 1.2952 --avoid_numbers '1652 1653 2131 2132 2295 2296 2297 2298' \
/g/paypal/paypal_2012_??_complet.csv /g/paypal/paypal_2012_??_complet.csv
#set +v #set +v
#echo 2013 #echo 2013 : 789 ( from 2299 to 3092 ) EUR 38652.00
#set -v #set -v
: /g/public_html/imapsync/W/paypal_reply/paypal_bilan \ : /g/public_html/imapsync/W/paypal_reply/paypal_bilan \
--first_in 2299 --avoid_numbers '2625 2626 2970 2971 2972' \ --first_in 2299 --avoid_numbers '2625 2626 2970 2971 2972' \

618
W/perlcritic_2.out Normal file
View file

@ -0,0 +1,618 @@
Missing "REQUIRED ARGUMENTS" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "DIAGNOSTICS" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "CONFIGURATION" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "DEPENDENCIES" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "INCOMPATIBILITIES" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
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 (358) at line 1, column 1. Consider refactoring. (Severity: 3)
Magic punctuation variable used at line 570, 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 742, column 10. Unnamed numeric literals make code less maintainable. (Severity: 2)
Postfix control "if" used at line 759, column 23. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 767, column 32. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 778, 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 806, 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 807, column 48. Unnamed numeric literals make code less maintainable. (Severity: 2)
Postfix control "if" used at line 816, column 15. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 817, column 21. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 823, column 25. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 831, column 24. See pages 93,94 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 840, column 40. See page 79 of PBP. (Severity: 2)
Postfix control "if" used at line 841, column 27. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 852, 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 855, 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 856, 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 859, 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 859, 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 862, 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 862, column 30. Unnamed numeric literals make code less maintainable. (Severity: 2)
Postfix control "if" used at line 864, column 31. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 865, column 12. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 879, 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 904, column 21. Unnamed numeric literals make code less maintainable. (Severity: 2)
Long number not separated with underscores at line 991, column 20. See page 59 of PBP. (Severity: 2)
Postfix control "unless" used at line 993, column 57. See pages 96,97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1020, column 19. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1021, column 50. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1023, column 22. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1024, column 22. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 1031, column 26. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1038, column 49. See page 53 of PBP. (Severity: 2)
Postfix control "unless" used at line 1063, column 43. See pages 96,97 of PBP. (Severity: 2)
Postfix control "unless" used at line 1065, column 43. See pages 96,97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1068, column 34. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1069, column 34. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1140, column 33. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1140, column 33. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1142, column 46. See page 53 of PBP. (Severity: 2)
Expression form of "map" at line 1142, column 51. See page 169 of PBP. (Severity: 4)
Regular expression without "/s" flag at line 1150, column 33. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1150, column 33. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1152, column 46. See page 53 of PBP. (Severity: 2)
Expression form of "map" at line 1152, column 51. See page 169 of PBP. (Severity: 4)
Postfix control "if" used at line 1223, column 15. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1233, column 3. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1241, column 32. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1286, column 3. See page 97 of PBP. (Severity: 2)
"unless" block used at line 1294, column 3. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1326, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1327, column 50. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 1337, column 39. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 1339, column 50. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 1349, column 49. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 1350, column 30. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 1368, column 57. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1378, column 77. See pages 93,94 of PBP. (Severity: 2)
Double-sigil dereference at line 1381, column 2. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 1386, column 5. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1390, column 3. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1393, column 2. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1396, column 53. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1431, column 79. See pages 93,94 of PBP. (Severity: 2)
Double-sigil dereference at line 1435, column 2. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 1440, column 3. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1444, column 3. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1474, column 10. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1494, column 33. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1495, column 4. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1503, column 39. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1507, column 38. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1516, column 4. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1518, column 45. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1519, column 31. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1519, column 31. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 1521, column 7. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1522, column 32. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1523, column 5. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1531, column 52. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1532, column 4. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1540, column 39. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1544, column 38. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1553, column 4. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1554, column 49. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1555, column 31. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1555, column 31. See page 237 of PBP. (Severity: 2)
"unless" block used at line 1556, column 5. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1585, column 70. See pages 93,94 of PBP. (Severity: 2)
Code structure is deeply nested at line 1586, column 41. Consider refactoring. (Severity: 3)
"unless" block used at line 1586, column 41. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1597, column 39. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1601, column 38. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 1665, column 47. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1666, column 59. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1668, column 4. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1671, column 23. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1705, column 3. See page 97 of PBP. (Severity: 2)
"unless" block used at line 1709, column 3. See page 97 of PBP. (Severity: 2)
Postfix control "unless" used at line 1744, column 20. See pages 96,97 of PBP. (Severity: 2)
Postfix control "unless" used at line 1745, column 20. See pages 96,97 of PBP. (Severity: 2)
Postfix control "if" used at line 1749, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1750, column 17. See pages 93,94 of PBP. (Severity: 2)
Too many arguments at line 1770, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 1780, column 58. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1781, column 58. See page 53 of PBP. (Severity: 2)
Too many arguments at line 1788, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 1798, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 1813, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1814, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1826, column 26. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1836, column 28. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1844, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1844, column 17. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1854, column 55. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1855, column 74. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1860, column 58. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 1892, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1920, column 77. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1923, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1926, column 73. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1929, column 77. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1932, column 76. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1935, column 68. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1938, column 67. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1941, column 77. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1944, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1947, column 71. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1950, column 69. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1953, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1956, column 67. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1959, column 67. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1962, column 69. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1977, column 15. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1977, column 15. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1989, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1996, column 5. See page 53 of PBP. (Severity: 2)
Too many arguments at line 2032, column 1. See page 182 of PBP. (Severity: 3)
Magic punctuation variable used in interpolated string at line 2043, column 17. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 2060, column 35. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2063, column 35. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 2077, column 14. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 2089, column 14. See pages 93,94 of PBP. (Severity: 2)
Too many arguments at line 2093, column 1. See page 182 of PBP. (Severity: 3)
Postfix control "if" used at line 2108, column 35. See pages 93,94 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 2125, column 17. See page 79 of PBP. (Severity: 2)
Too many arguments at line 2153, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 2164, column 38. See page 53 of PBP. (Severity: 2)
Postfix control "unless" used at line 2167, column 51. See pages 96,97 of PBP. (Severity: 2)
Postfix control "if" used at line 2171, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 2172, column 35. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 2174, column 32. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 2178, column 2. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 2189, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2232, column 40. See page 53 of PBP. (Severity: 2)
Too many arguments at line 2256, column 1. See page 182 of PBP. (Severity: 3)
Postfix control "if" used at line 2281, column 41. See pages 93,94 of PBP. (Severity: 2)
Numeric escapes in interpolated string at line 2294, column 30. See page 56 of PBP. (Severity: 2)
Quotes used with an empty string at line 2296, column 41. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2314, column 32. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2314, column 32. See page 237 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2327, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2330, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2333, column 39. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2342, column 82. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2351, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2351, column 45. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2351, column 61. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2354, column 22. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2357, column 39. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2368, column 41. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2381, column 29. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 2387, column 5. See page 79 of PBP. (Severity: 2)
Subroutine "is_valid_directory" does not end with "return" at line 2392, column 1. See page 197 of PBP. (Severity: 4)
Return value of "close" ignored at line 2418, column 2. Check the return value of "close" for success. (Severity: 2)
"die" used instead of "croak" at line 2433, column 2. See page 283 of PBP. (Severity: 3)
Magic punctuation variable used in interpolated string at line 2438, column 12. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 2446, column 14. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2448, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2449, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2460, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2461, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2462, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2464, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2465, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2466, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2468, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2469, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2472, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2473, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2476, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2477, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2478, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2480, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2481, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2482, column 6. See page 53 of PBP. (Severity: 2)
Reused variable name in lexical scope: $imap2 at line 2548, column 9. Invent unique variable names. (Severity: 3)
Regular expression without "/s" flag at line 2567, column 25. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/x" flag at line 2567, column 25. See page 236 of PBP. (Severity: 3)
Regular expression without "/m" flag at line 2567, column 25. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2570, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/x" flag at line 2570, column 20. See page 236 of PBP. (Severity: 3)
Regular expression without "/m" flag at line 2570, column 20. See page 237 of PBP. (Severity: 2)
Mixed high and low-precedence booleans at line 2571, column 13. See page 70 of PBP. (Severity: 4)
Quotes used with an empty string at line 2571, column 26. See page 53 of PBP. (Severity: 2)
List of quoted literal words at line 2625, column 17. Use 'qw()' instead. (Severity: 2)
List of quoted literal words at line 2626, column 17. Use 'qw()' instead. (Severity: 2)
Double-sigil dereference at line 2691, column 28. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 2695, column 26. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 2704, column 36. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 2755, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2756, column 37. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2865, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2875, column 21. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2883, column 38. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2884, column 38. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2884, column 42. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2886, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2886, column 30. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2886, column 34. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2886, column 38. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2887, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2887, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2888, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2888, column 51. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2889, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2889, column 53. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2890, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2890, column 53. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2891, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2891, column 53. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2892, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2892, column 55. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2894, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2894, column 55. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2896, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2896, column 55. See page 53 of PBP. (Severity: 2)
Numeric escapes in interpolated string at line 2906, column 12. See page 56 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2909, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2909, column 14. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2910, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2910, column 14. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2911, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2911, column 14. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2912, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2912, column 21. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 2912, column 30. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2912, column 49. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2912, column 74. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2919, column 27. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2920, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2921, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2932, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2932, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2939, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2939, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2954, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2954, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2961, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2962, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2963, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2963, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2970, column 14. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2984, column 13. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2984, column 13. See page 237 of PBP. (Severity: 2)
Postfix control "unless" used at line 2990, column 4. See pages 96,97 of PBP. (Severity: 2)
Use 'eq' or hash instead of fixed-pattern regexps at line 2990, column 62. See pages 271,272 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2990, column 62. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2990, column 62. See page 237 of PBP. (Severity: 2)
Expression form of "eval" at line 2996, column 13. See page 161 of PBP. (Severity: 5)
Magic punctuation variable used at line 2998, column 49. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 2999, column 14. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 3007, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3007, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3007, column 57. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3008, column 28. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3016, column 42. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3016, column 42. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3017, column 17. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3017, column 21. See page 53 of PBP. (Severity: 2)
"unless" block used at line 3045, column 3. See page 97 of PBP. (Severity: 2)
Double-sigil dereference at line 3058, column 3. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 3058, column 35. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3061, column 71. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3061, column 71. See page 79 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3064, column 100. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3064, column 100. See page 79 of PBP. (Severity: 2)
Double-sigil dereference at line 3066, column 15. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 3110, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3110, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3114, column 41. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3173, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3184, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3184, column 23. See page 53 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 3199, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3199, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3201, column 5. See page 53 of PBP. (Severity: 2)
Expression form of "eval" at line 3217, column 13. See page 161 of PBP. (Severity: 5)
Magic punctuation variable used at line 3219, column 45. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3220, column 10. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3231, column 14. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3233, column 14. See page 79 of PBP. (Severity: 2)
Double-sigil dereference at line 3234, column 37. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3234, column 54. See page 228 of PBP. (Severity: 2)
"unless" block used at line 3240, column 4. See page 97 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3243, column 16. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 3254, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3264, column 5. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3272, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3272, column 17. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3275, column 28. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3275, column 28. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3276, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3281, column 17. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3287, column 6. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3300, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3300, column 21. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3301, column 44. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3304, column 24. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3312, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3312, column 21. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3313, column 40. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3316, column 24. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 3338, column 67. See pages 93,94 of PBP. (Severity: 2)
Subroutine "select_msgs" does not end with "return" at line 3358, column 1. See page 197 of PBP. (Severity: 4)
Long number not separated with underscores at line 3442, column 63. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 3443, column 63. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 3464, column 45. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 3467, column 46. See page 59 of PBP. (Severity: 2)
Double-sigil dereference at line 3478, column 9. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3479, column 9. See page 228 of PBP. (Severity: 2)
"unless" block used at line 3482, column 3. See page 97 of PBP. (Severity: 2)
"unless" block used at line 3483, column 3. See page 97 of PBP. (Severity: 2)
Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3497, column 1. See page 197 of PBP. (Severity: 4)
Postfix control "if" used at line 3545, column 22. See pages 93,94 of PBP. (Severity: 2)
Subroutine "copy_message" with high complexity score (30) at line 3574, column 1. Consider refactoring. (Severity: 3)
Too many arguments at line 3574, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 3581, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3582, column 61. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 3592, column 41. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 3593, column 95. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 3648, column 19. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 3648, column 35. See page 53 of PBP. (Severity: 2)
Too many arguments at line 3665, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 3670, column 60. See page 53 of PBP. (Severity: 2)
"unless" block used at line 3672, column 2. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 3675, column 24. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 3677, column 34. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3702, column 3. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3705, column 49. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3713, column 16. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3735, column 15. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3735, column 15. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 3740, column 37. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 3741, column 64. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 3748, column 16. See page 53 of PBP. (Severity: 2)
Subroutine "tests_subject" does not end with "return" at line 3759, column 1. See page 197 of PBP. (Severity: 4)
Quotes used with an empty string at line 3760, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3760, column 21. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3800, column 6. See page 53 of PBP. (Severity: 2)
Too many arguments at line 3822, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 3831, column 58. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3843, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3843, column 20. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3858, column 75. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3858, column 75. See page 237 of PBP. (Severity: 2)
Subroutine "sleep_if_needed" does not end with "return" at line 3878, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $total_bytes_transferred at line 3879, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3879, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3891, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxmessagespersecond at line 3891, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $total_bytes_transferred at line 3912, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxbytespersecond at line 3912, column 9. Invent unique variable names. (Severity: 3)
Postfix control "if" used at line 3940, column 28. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 3948, column 10. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 3981, column 2. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3981, column 22. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3982, column 2. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3982, column 22. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3984, column 26. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4041, column 37. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4042, column 37. See page 228 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4055, column 23. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4055, column 23. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 4082, column 50. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 4129, column 35. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4129, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4129, column 57. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4129, column 68. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4129, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4130, column 35. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4130, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4130, column 57. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4130, column 68. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4130, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4130, column 90. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 4134, column 37. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4135, column 37. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 4177, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4177, column 43. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4177, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4177, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4177, column 76. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4178, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4178, column 43. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4178, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4178, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4178, column 76. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4178, column 87. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 4181, column 34. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4182, column 34. See page 228 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4197, column 16. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4197, column 16. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 4210, column 47. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 4242, column 78. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4243, column 21. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 4246, column 102. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4255, column 29. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 4255, column 29. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 4294, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4295, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4299, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4300, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4301, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4345, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4346, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4347, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4351, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4352, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4353, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4380, column 49. See page 53 of PBP. (Severity: 2)
Mismatched operator at line 4380, column 75. Numeric/string operators and operands should match. (Severity: 3)
Quotes used with an empty string at line 4429, column 33. See page 53 of PBP. (Severity: 2)
Hard tabs used at line 4464, column 10. See page 20 of PBP. (Severity: 3)
Quotes used with an empty string at line 4499, column 43. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4500, column 44. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4501, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4512, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4513, column 25. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4529, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4529, column 21. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4531, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4531, column 20. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4555, column 13. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4555, column 13. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 4561, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4561, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4561, column 36. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4562, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4563, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4566, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4567, column 60. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4588, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4589, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4605, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4606, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4609, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4618, column 15. See page 53 of PBP. (Severity: 2)
Expression form of "eval" at line 4736, column 13. See page 161 of PBP. (Severity: 5)
Magic punctuation variable used at line 4738, column 38. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 4739, column 10. See page 79 of PBP. (Severity: 2)
Long number not separated with underscores at line 4752, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4753, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4755, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4756, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4758, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4759, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4761, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4762, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4764, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4765, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4767, column 49. See page 59 of PBP. (Severity: 2)
Quotes used with an empty string at line 4776, column 23. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 4822, column 65. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 4881, column 31. See pages 93,94 of PBP. (Severity: 2)
Too many arguments at line 4892, column 1. See page 182 of PBP. (Severity: 3)
Double-sigil dereference at line 4896, column 29. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4907, column 43. See page 228 of PBP. (Severity: 2)
Postfix control "unless" used at line 4930, column 29. See pages 96,97 of PBP. (Severity: 2)
Double-sigil dereference at line 4956, column 29. See page 228 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4967, column 30. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4967, column 30. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4982, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4982, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4985, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4985, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4988, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4988, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4991, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4991, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4994, column 98. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4994, column 98. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5007, column 37. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 5007, column 41. See page 53 of PBP. (Severity: 2)
Numeric escapes in interpolated string at line 5012, column 51. See page 56 of PBP. (Severity: 2)
Quotes used with an empty string at line 5022, column 21. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5024, column 52. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5026, column 9. Check the return value of "close" for success. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5035, column 46. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5037, column 2. Check the return value of "close" for success. (Severity: 2)
Quotes used with an empty string at line 5038, column 14. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5044, column 67. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5046, column 2. Check the return value of "close" for success. (Severity: 2)
Regular expression without "/s" flag at line 5061, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5061, column 21. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5085, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5085, column 24. See page 237 of PBP. (Severity: 2)
Magic punctuation variable used at line 5102, column 18. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5125, column 2. Check the return value of "close" for success. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5145, column 20. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used at line 5159, column 23. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used at line 5161, column 7. See page 79 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5161, column 13. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5161, column 13. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5176, column 20. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 5178, column 11. See page 53 of PBP. (Severity: 2)
Backtick operator used at line 5205, column 12. Use IPC::Open3 instead. (Severity: 3)
Backtick operator used at line 5225, column 11. Use IPC::Open3 instead. (Severity: 3)
String delimiter used with "split" at line 5230, column 28. Express it as a regex instead. (Severity: 2)
Quotes used with a noisy string at line 5230, column 34. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5294, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5294, column 17. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5303, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5303, column 17. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5341, column 13. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5344, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5344, column 17. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5347, column 16. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 5347, column 30. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 5348, column 22. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5353, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5353, column 12. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5365, column 38. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5365, column 72. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5365, column 72. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5366, column 38. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5368, column 46. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5372, column 30. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5374, column 34. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5379, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5379, column 12. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5395, column 19. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5395, column 19. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5408, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5408, column 12. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5414, column 29. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5420, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5420, column 12. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5431, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5431, column 12. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5452, column 5. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 5505, column 33. See page 228 of PBP. (Severity: 2)
Expression form of "eval" at line 5526, column 43. See page 161 of PBP. (Severity: 5)
Expression form of "eval" at line 5530, column 45. See page 161 of PBP. (Severity: 5)
Postfix control "if" used at line 5535, column 34. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5536, column 36. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5550, column 33. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5550, column 33. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5551, column 36. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5589, column 27. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5589, column 27. See page 237 of PBP. (Severity: 2)
Use 'eq' or hash instead of fixed-pattern regexps at line 5593, column 36. See pages 271,272 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5593, column 36. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5593, column 36. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5595, column 31. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5595, column 31. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5601, column 34. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5601, column 34. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5604, column 65. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 5730, column 17. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5735, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5735, column 20. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5741, column 28. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5741, column 33. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 5742, column 28. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5742, column 33. See page 53 of PBP. (Severity: 2)
Long number not separated with underscores at line 5775, column 55. See page 59 of PBP. (Severity: 2)
"$i" is declared but not used at line 5794, column 9. Unused variables clutter code and make it harder to read. (Severity: 3)
Quotes used with an empty string at line 5805, column 28. See page 53 of PBP. (Severity: 2)
Long number not separated with underscores at line 5813, column 40. See page 59 of PBP. (Severity: 2)
Quotes used with an empty string at line 5826, column 14. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 5827, column 32. See page 53 of PBP. (Severity: 2)
Long number not separated with underscores at line 5838, column 57. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 5839, column 57. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 5840, column 68. See page 59 of PBP. (Severity: 2)
Reused variable name in lexical scope: $logfile at line 5846, column 2. Invent unique variable names. (Severity: 3)
Subroutine "teelaunch" does not end with "return" at line 5853, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $logfile at line 5854, column 2. Invent unique variable names. (Severity: 3)
Magic punctuation variable used in interpolated string at line 5855, column 36. See page 79 of PBP. (Severity: 2)
Close filehandles as soon as possible after opening them at line 5857, column 2. See page 209 of PBP. (Severity: 4)
"die" used instead of "croak" at line 5858, column 7. See page 283 of PBP. (Severity: 3)
Magic punctuation variable used in interpolated string at line 5858, column 12. See page 79 of PBP. (Severity: 2)
Magic variable "*STDERR" should be assigned as "local" at line 5860, column 10. See pages 81,82 of PBP. (Severity: 4)
Double-sigil dereference at line 5860, column 12. See page 228 of PBP. (Severity: 2)
One-argument "select" used at line 5861, column 2. See page 224 of PBP. (Severity: 4)
Quotes used with an empty string at line 5867, column 25. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 5868, column 43. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5869, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5869, column 60. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated here-document at line 5870, column 15. See page 79 of PBP. (Severity: 2)
Quotes used with a noisy string at line 6126, column 20. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 6131, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 6131, column 14. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 6279, column 49. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6292, column 12. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6296, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "unless" used at line 6299, column 30. See pages 96,97 of PBP. (Severity: 2)
Postfix control "if" used at line 6307, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6318, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6386, column 33. See pages 93,94 of PBP. (Severity: 2)

49
W/perlcritic_3.out Normal file
View file

@ -0,0 +1,49 @@
Main code has high complexity score (358) at line 1, column 1. Consider refactoring. (Severity: 3)
Expression form of "map" at line 1142, column 51. See page 169 of PBP. (Severity: 4)
Expression form of "map" at line 1152, column 51. See page 169 of PBP. (Severity: 4)
Code structure is deeply nested at line 1586, column 41. Consider refactoring. (Severity: 3)
Too many arguments at line 1770, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 1788, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 1798, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2032, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2093, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2153, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2256, column 1. See page 182 of PBP. (Severity: 3)
Subroutine "is_valid_directory" does not end with "return" at line 2392, column 1. See page 197 of PBP. (Severity: 4)
"die" used instead of "croak" at line 2433, column 2. See page 283 of PBP. (Severity: 3)
Reused variable name in lexical scope: $imap2 at line 2548, column 9. Invent unique variable names. (Severity: 3)
Regular expression without "/x" flag at line 2567, column 25. See page 236 of PBP. (Severity: 3)
Regular expression without "/x" flag at line 2570, column 20. See page 236 of PBP. (Severity: 3)
Mixed high and low-precedence booleans at line 2571, column 13. See page 70 of PBP. (Severity: 4)
Expression form of "eval" at line 2996, column 13. See page 161 of PBP. (Severity: 5)
Expression form of "eval" at line 3217, column 13. See page 161 of PBP. (Severity: 5)
Subroutine "select_msgs" does not end with "return" at line 3358, column 1. See page 197 of PBP. (Severity: 4)
Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3497, column 1. See page 197 of PBP. (Severity: 4)
Subroutine "copy_message" with high complexity score (30) at line 3574, column 1. Consider refactoring. (Severity: 3)
Too many arguments at line 3574, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 3665, column 1. See page 182 of PBP. (Severity: 3)
Subroutine "tests_subject" does not end with "return" at line 3759, column 1. See page 197 of PBP. (Severity: 4)
Too many arguments at line 3822, column 1. See page 182 of PBP. (Severity: 3)
Subroutine "sleep_if_needed" does not end with "return" at line 3878, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $total_bytes_transferred at line 3879, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3879, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3891, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxmessagespersecond at line 3891, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $total_bytes_transferred at line 3912, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxbytespersecond at line 3912, column 9. Invent unique variable names. (Severity: 3)
Mismatched operator at line 4380, column 75. Numeric/string operators and operands should match. (Severity: 3)
Hard tabs used at line 4464, column 10. See page 20 of PBP. (Severity: 3)
Expression form of "eval" at line 4736, column 13. See page 161 of PBP. (Severity: 5)
Too many arguments at line 4892, column 1. See page 182 of PBP. (Severity: 3)
Backtick operator used at line 5205, column 12. Use IPC::Open3 instead. (Severity: 3)
Backtick operator used at line 5225, column 11. Use IPC::Open3 instead. (Severity: 3)
Expression form of "eval" at line 5526, column 43. See page 161 of PBP. (Severity: 5)
Expression form of "eval" at line 5530, column 45. See page 161 of PBP. (Severity: 5)
"$i" is declared but not used at line 5794, column 9. Unused variables clutter code and make it harder to read. (Severity: 3)
Reused variable name in lexical scope: $logfile at line 5846, column 2. Invent unique variable names. (Severity: 3)
Subroutine "teelaunch" does not end with "return" at line 5853, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $logfile at line 5854, column 2. Invent unique variable names. (Severity: 3)
Close filehandles as soon as possible after opening them at line 5857, column 2. See page 209 of PBP. (Severity: 4)
"die" used instead of "croak" at line 5858, column 7. See page 283 of PBP. (Severity: 3)
Magic variable "*STDERR" should be assigned as "local" at line 5860, column 10. See pages 81,82 of PBP. (Severity: 4)
One-argument "select" used at line 5861, column 2. See page 224 of PBP. (Severity: 4)

View file

@ -1,14 +1,51 @@
body { body {
color: black; color: black;
background-color: #eeffff background-color: #eeffff
} }
#left-poll {
float: left;
width: 30%;
}
#centered-logo {
float: left;
width: 70%;
}
#right-poll {
float: right;
width: 30%;
}
#full-page {
float: left;
width: 100%;
}
div.center { div.center {
text-align: center; text-align: center;
} }
img{ img {
border:0; border: 0;
} }
/* $Id: style.css,v 1.4 2010/11/19 23:57:16 gilles Exp gilles $ */ .none
{
list-style-type: none;
}
.bold
{
font-weight:bold;
}
.smaller
{
font-size: smaller;
}
/* $Id: style.css,v 1.5 2014/07/31 03:33:43 gilles Exp gilles $ */

View file

@ -1,8 +1,15 @@
REM $Id: test3.bat,v 1.12 2014/05/22 10:15:14 gilles Exp gilles $ REM $Id: test3.bat,v 1.13 2014/09/15 22:23:14 gilles Exp gilles $
cd /D %~dp0 cd /D %~dp0
perl ./imapsync --host1 lamiral.info --tls1 --user1 tata --passfile1 secret.tata --host2 lamiral.info --tls2 --user2 titi --passfile2 secret.titi --justconnect --debugimap REM \$1 must be $1 on Windows
perl ./imapsync ^
--host1 p --user1 tata ^
--passfile1 secret.tata ^
--host2 p --user2 titi ^
--passfile2 secret.titi ^
--justfolders --nofoldersizes --folder "INBOX. blanc_begin" --regextrans2 "s,(\.|^) +,$1,g"
EXIT EXIT

5
W/tw-hash.html Normal file
View file

@ -0,0 +1,5 @@
<a href="https://twitter.com/intent/tweet?button_hashtag=imapsync" class="twitter-hashtag-button" data-size="large" data-related="imapsync" data-url="http://imapsync.lamiral.info/" data-dnt="true">Tweet #imapsync</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?'http':'https';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+'://platform.twitter.com/widgets.js';fjs.parentNode.insertBefore(js,fjs);}}(document, 'script', 'twitter-wjs');</script>

View file

@ -1,5 +1,5 @@
@REM @REM
@REM $Id: sync_loop_windows.bat,v 1.6 2014/05/22 14:20:51 gilles Exp gilles $ @REM $Id: sync_loop_windows.bat,v 1.7 2014/06/24 08:40:46 gilles Exp gilles $
@REM @REM
@REM imapsync massive sync example batch for Windows users @REM imapsync massive sync example batch for Windows users
@REM lines beginning with REM are just comments @REM lines beginning with REM are just comments
@ -7,6 +7,7 @@
@REM Replace "imap.side1.org" and "imap.side2.org" with your own values @REM Replace "imap.side1.org" and "imap.side2.org" with your own values
@REM @REM
@REM ==== Credentials file ==== @REM ==== Credentials file ====
@REM Credentials data are supposed to be in the file named "file.txt" in the following format @REM Credentials data are supposed to be in the file named "file.txt" in the following format
@REM user001_1;password001_1;user001_2;password001_2 @REM user001_1;password001_1;user001_2;password001_2
@REM ... @REM ...
@ -18,9 +19,11 @@
@REM by changing "SET csvfile=file.txt" below. @REM by changing "SET csvfile=file.txt" below.
@REM ==== Log files ==== @REM ==== Log files ====
@REM Log files are in the LOG_imapsync subfolder @REM Log files are in the LOG_imapsync subfolder
@REM ==== Parallel executions ==== @REM ==== Parallel executions ====
@REM If you want to do parallel runs of imapsync then this current script is a good start. @REM If you want to do parallel runs of imapsync then this current script is a good start.
@REM Just copy it several times and replace, on each copy, the csvfile variable value. @REM Just copy it several times and replace, on each copy, the csvfile variable value.
@REM Instead of SET csvfile=file.txt write for example @REM Instead of SET csvfile=file.txt write for example
@ -30,7 +33,17 @@
@REM Of course you also have to split data contained in file.txt @REM Of course you also have to split data contained in file.txt
@REM into file01.txt file02.txt etc. @REM into file01.txt file02.txt etc.
@REM After that, just double-clic on each batch file to launch each process @REM After that, just double-clic on each batch file to launch each process
@REM
@REM Be aware that imapsync can be also a cpu/memory cruncher on the remote imap servers,
@REM especially in parallel runs. The best practice rule to answer the question
@REM "how many processes in parallel can we run?" is:
@REM 1) Measure the total transfer rate by adding each one printed in each run.
@REM 2) Launch new parallel runs as long as the total transfer rate increase.
@REM 3) When the total transfer rate starts to diminish, stop new launches.
@REM Note N as the number of parallel runs you got until then.
@REM 4) Only keep N-2 parallel runs for the future.
@REM ==== The real stuff ====
@REM @echo off @REM @echo off

View file

@ -22,7 +22,7 @@ Synchronises mailboxes between two imap servers.
Good at IMAP migration. More than 52 different IMAP server softwares Good at IMAP migration. More than 52 different IMAP server softwares
supported with success, few failures. supported with success, few failures.
$Revision: 1.592 $ $Revision: 1.596 $
=head1 SYNOPSIS =head1 SYNOPSIS
@ -121,6 +121,9 @@ The option list:
[--releasecheck] [--releasecheck]
[--pidfile <filepath>] [--pidfile <filepath>]
[--tmpdir <dirpath>] [--tmpdir <dirpath>]
[--nolog]
[--log]
[--logfile <filepath>]
[--version] [--help] [--version] [--help]
[--tests] [--tests_debug] [--tests] [--tests_debug]
@ -555,7 +558,7 @@ Entries for imapsync:
Feedback (good or bad) will often be welcome. Feedback (good or bad) will often be welcome.
$Id: imapsync,v 1.592 2014/05/22 10:03:17 gilles Exp gilles $ $Id: imapsync,v 1.596 2014/09/04 17:17:36 gilles Exp gilles $
=cut =cut
@ -688,13 +691,14 @@ my(
$skipcrossduplicates, $debugcrossduplicates, $skipcrossduplicates, $debugcrossduplicates,
$log, $logfile, $log, $logfile,
$disarmreadreceipts, $disarmreadreceipts,
$mixdiffcasefolders,
); );
# main program # main program
# global variables initialisation # global variables initialisation
$rcs = '$Id: imapsync,v 1.592 2014/05/22 10:03:17 gilles Exp gilles $ '; $rcs = '$Id: imapsync,v 1.596 2014/09/04 17:17:36 gilles Exp gilles $ ';
$total_bytes_transferred = 0; $total_bytes_transferred = 0;
$total_bytes_skipped = 0; $total_bytes_skipped = 0;
@ -768,8 +772,8 @@ $modules_version = defined( $modules_version ) ? $modules_version : 1 ;
# The second line (ending with "1 ;") can stay active or be commented, # The second line (ending with "1 ;") can stay active or be commented,
# the result will be the same: no releasecheck by default. # the result will be the same: no releasecheck by default.
$releasecheck = defined($releasecheck) ? $releasecheck : 0 ; #$releasecheck = defined($releasecheck) ? $releasecheck : 0 ;
#$releasecheck = defined($releasecheck) ? $releasecheck : 1 ; $releasecheck = defined($releasecheck) ? $releasecheck : 1 ;
my $warn_release = ($releasecheck) ? check_last_release() : '' ; my $warn_release = ($releasecheck) ? check_last_release() : '' ;
@ -821,6 +825,8 @@ $showpasswords = defined( $showpasswords ) ? $showpasswords : 0 ;
$fixslash2 = defined( $fixslash2 ) ? $fixslash2 : 1 ; $fixslash2 = defined( $fixslash2 ) ? $fixslash2 : 1 ;
$fixInboxINBOX = defined( $fixInboxINBOX ) ? $fixInboxINBOX : 1 ; $fixInboxINBOX = defined( $fixInboxINBOX ) ? $fixInboxINBOX : 1 ;
$create_folder_old = defined( $create_folder_old ) ? $create_folder_old : 0 ; $create_folder_old = defined( $create_folder_old ) ? $create_folder_old : 0 ;
$mixdiffcasefolders = defined( $mixdiffcasefolders ) ? $mixdiffcasefolders : 1 ;
$delete2duplicates = 1 if ( $delete2 and ( ! defined( $delete2duplicates ) ) ) ; $delete2duplicates = 1 if ( $delete2 and ( ! defined( $delete2duplicates ) ) ) ;
@ -1257,7 +1263,6 @@ FOLDER: foreach my $h1_fold ( @h1_folders_wanted ) {
# host1 can not be fetched read only, select is needed because of expunge. # host1 can not be fetched read only, select is needed because of expunge.
select_folder( $imap1, $h1_fold, 'Host1' ) or next FOLDER ; select_folder( $imap1, $h1_fold, 'Host1' ) or next FOLDER ;
if ( ! exists( $h2_folders_all{ $h2_fold } ) ) { if ( ! exists( $h2_folders_all{ $h2_fold } ) ) {
create_folder( $imap2, $h2_fold, $h1_fold ) or next FOLDER ; create_folder( $imap2, $h2_fold, $h1_fold ) or next FOLDER ;
} }
@ -1728,7 +1733,10 @@ if ( $foldersizesatend ) {
timenext() ; timenext() ;
# Get all folders on host2 again since new were created # Get all folders on host2 again since new were created
@h2_folders_all = sort $imap2->folders(); @h2_folders_all = sort $imap2->folders();
for ( @h2_folders_all ) { $h2_folders_all{ $_ } = 1 } ; for ( @h2_folders_all ) {
$h2_folders_all{ $_ } = 1 ;
$h2_folders_all_UPPER{ uc( $_ ) } = 1 ;
} ;
( $h1_nb_msg_end, $h1_bytes_end ) = foldersizes( "Host1", $imap1, $search1, @h1_folders_wanted ) ; ( $h1_nb_msg_end, $h1_bytes_end ) = foldersizes( "Host1", $imap1, $search1, @h1_folders_wanted ) ;
( $h2_nb_msg_end, $h2_bytes_end ) = foldersizes( "Host2", $imap2, $search2, @h2_folders_from_1_wanted ) ; ( $h2_nb_msg_end, $h2_bytes_end ) = foldersizes( "Host2", $imap2, $search2, @h2_folders_from_1_wanted ) ;
} }
@ -2372,8 +2380,8 @@ sub banner_imapsync {
my @argv = @_ ; my @argv = @_ ;
my $banner_imapsync = join("", my $banner_imapsync = join("",
'$RCSfile: imapsync,v $ ', '$RCSfile: imapsync,v $ ',
'$Revision: 1.592 $ ', '$Revision: 1.596 $ ',
'$Date: 2014/05/22 10:03:17 $ ', '$Date: 2014/09/04 17:17:36 $ ',
"\n",localhost_info(), "\n", "\n",localhost_info(), "\n",
"Command line used:\n", "Command line used:\n",
"$0 ", command_line_nopassword( @argv ), "\n", "$0 ", command_line_nopassword( @argv ), "\n",
@ -2549,6 +2557,12 @@ sub create_folder {
print "Folder [$h2_fold] already exists\n" ; print "Folder [$h2_fold] already exists\n" ;
return( 1 ) ; return( 1 ) ;
} }
if ( ( not $mixdiffcasefolders )
and ( $imap2->exists( $h2_fold ) ) ) {
print "Folder [$h2_fold] already exists and --nomixdiffcasefolders is set\n" ;
return( 0 ) ;
}
@parts = split( /\Q$h2_sep\E/ , $h2_fold ) ; @parts = split( /\Q$h2_sep\E/ , $h2_fold ) ;
pop( @parts ) ; pop( @parts ) ;
@ -3030,7 +3044,7 @@ sub foldersizes {
#unless ( $imap->examine( $folder ) ) { #unless ( $imap->examine( $folder ) ) {
unless ( $imap->select( $folder ) ) { unless ( $imap->select( $folder ) ) {
print print
"$side Folder $folder: Could not examine: ", "$side Folder $folder: Could not select: ",
$imap->LastError, "\n" ; $imap->LastError, "\n" ;
$nb_errors++ ; $nb_errors++ ;
next ; next ;
@ -4708,7 +4722,8 @@ EOM
), ),
'regexmess: 4 Delete header Disposition-Notification-To:'); 'regexmess: 4 Delete header Disposition-Notification-To:');
# regex to play with Date: from the FAQ
#@regexmess = 's{\A(.*?(?! ^$))^Date:(.*?)$}{$1Date:$2\nX-Date:$2}gxms'
return( ) ; return( ) ;
@ -5064,7 +5079,7 @@ sub check_last_release {
} }
sub imapsync_version { sub imapsync_version {
my $rcs_imapsync = '$Id: imapsync,v 1.592 2014/05/22 10:03:17 gilles Exp gilles $ ' ; my $rcs_imapsync = '$Id: imapsync,v 1.596 2014/09/04 17:17:36 gilles Exp gilles $ ' ;
my $imapsync_version ; my $imapsync_version ;
if ( $rcs_imapsync =~ m{,v\s+(\d+\.\d+)}xo ) { if ( $rcs_imapsync =~ m{,v\s+(\d+\.\d+)}xo ) {
@ -5935,6 +5950,8 @@ Several options are mandatory.
--pidfile <string> : The file where imapsync pid is written. --pidfile <string> : The file where imapsync pid is written.
--pidfilelocking : Abort if pidfile already exists. Usefull to avoid --pidfilelocking : Abort if pidfile already exists. Usefull to avoid
concurrent transfers on the same mailbox. concurrent transfers on the same mailbox.
--nolog : Turn off logging on file
--logfile <string> : Change the default logfile pathname and filename.
--prefix1 <string> : Remove prefix to all destination folders --prefix1 <string> : Remove prefix to all destination folders
(usually INBOX. or INBOX/ or an empty string "") (usually INBOX. or INBOX/ or an empty string "")
@ -5981,6 +5998,9 @@ Several options are mandatory.
--expunge2 : Expunge messages on host2 after messages transfer. --expunge2 : Expunge messages on host2 after messages transfer.
--uidexpunge2 : uidexpunge messages on the host2 account --uidexpunge2 : uidexpunge messages on the host2 account
that are not on the host1 account, requires --delete2 that are not on the host1 account, requires --delete2
--nomixdiffcasefolders : Avoid merging folders that are considered different on
host1 but the same on destination host2 because of
case sensitivities and insensitivities.
--syncinternaldates : Sets the internal dates on host2 same as host1. --syncinternaldates : Sets the internal dates on host2 same as host1.
Turned on by default. Internal date is the date Turned on by default. Internal date is the date
@ -6286,7 +6306,8 @@ sub tests_debug {
SKIP: { SKIP: {
skip "No test in normal run" if ( not $tests_debug ); skip "No test in normal run" if ( not $tests_debug );
#tests_mkpath( ) ; #tests_mkpath( ) ;
tests_logfile( ) ; #tests_logfile( ) ;
tests_regexmess();
} }
return( ) ; return( ) ;
} }

View file

@ -1,67 +0,0 @@
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

View file

@ -1,11 +1,13 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head> <head>
<title>Official imapsync migration tool ( release <!--#exec cmd="cat ./VERSION"--> )</title> <title>Official imapsync migration tool ( release <!--#exec cmd="cat ./VERSION"--> )</title>
<meta name="generator" content="Bluefish 1.0.7"/> <meta name="generator" content="Bluefish 1.0.7"/>
<meta name="author" content="Gilles LAMIRAL"/> <meta name="author" content="Gilles LAMIRAL"/>
<meta name="date" content="2014-05-30T01:37:14+0200"/> <meta name="date" content="2014-09-16T00:19:01+0200"/>
<meta name="copyright" content="None"/> <meta name="copyright" content="None"/>
<meta name="keywords" content="imap, transfert, migration"/> <meta name="keywords" content="imap, transfert, migration"/>
<meta name="description" content="imap migration tool"/> <meta name="description" content="imap migration tool"/>
@ -16,32 +18,37 @@
<link rel="icon" type="image/png" href="W/images/logo_imapsync_s.png" /> <link rel="icon" type="image/png" href="W/images/logo_imapsync_s.png" />
<link href="W/style.css" rel="stylesheet" type="text/css"/> <link href="W/style.css" rel="stylesheet" type="text/css"/>
<style type="text/css">
.none
{
list-style-type: none;
}
</style>
</head> </head>
<body> <body>
<div id="fb-root"></div>
<script type="text/javascript" src="W/fb-root.js"></script>
<ul class="none"> <ul class="none">
<li>Are your <a href="#imap_server_success">imap servers <b>supported</b></a> by imapsync?</li> <li>Are your <a href="#imap_server_success">imap servers <b>supported</b></a> by imapsync?</li>
<!-- <li>Buy <a href="#buy_all"><b>imapsync</b></a> ( imapsync.exe + source code for any OS )</li>
<li>Buy <a href="#buy_source"><b>imapsync source code</b></a> (any OS)</li>
<li>Buy <a href="#buy_exe"><b>standalone win32</b></a> <b>imapsync.exe</b> (also <b>works on win64</b>)</li>
<li>Buy <b>full professional</b> <a href="#buy_support">imapsync <b>support</b></a> to successfully perform your migration</li>
-->
<li>Buy <a href="#buy_all"><b>imapsync</b></a> ( imapsync.exe + source code )</li>
</ul> </ul>
<div class="center">
<a href="http://imapsync.lamiral.info/"><img src="W/images/logo_imapsync.png" width="486" height="309" alt="imapsync logo"/></a> <div id="right-poll">
<script type="text/javascript" src="http://www.micropoll.com/a/MicroPoll?id=3880191">
</script>
</div>
<div id="centered-logo" class="center">
<a href="http://imapsync.lamiral.info/">
<img src="W/images/logo_imapsync.png" width="486" height="309" alt="imapsync logo"/>
</a>
<h1>Welcome to the imapsync web site!</h1> <h1>Welcome to the imapsync web site!</h1>
<!-- I use ssi here only to pass a strict xhtml validation that facebook can't pass -->
<!--#include file="W/tw-hash.html" -->
<!-- include file="W/fb-like.html" -->
</div> </div>
<h2>What is imapsync?</h2> <h2>What is imapsync?</h2>
@ -49,7 +56,7 @@
<p> <p>
The purpose of imapsync is to <b>migrate</b> IMAP accounts or to <b>backup</b> IMAP accounts. The purpose of imapsync is to <b>migrate</b> IMAP accounts or to <b>backup</b> IMAP accounts.
IMAP is one of the three current standard protocols to access mailboxes, IMAP is one of the three current standard protocols to access mailboxes,
the two other are POP3 and HTTP with webmails (often tied to an IMAP server). the two other are POP3 and HTTP with webmails, webmail are often tied to an IMAP server.
</p> </p>
<p><b>imapsync</b> software is a command line tool that allows incremental and <p><b>imapsync</b> software is a command line tool that allows incremental and
@ -69,7 +76,7 @@ from a <a href="#DOC_BASIC">batch file</a>.
<b>imapsync can't migrate Contacts and Calendars</b>. <b>imapsync can't migrate Contacts and Calendars</b>.
Most email systems don't set or get Contacts or Calendars via the IMAP protocol. Most email systems don't set or get Contacts or Calendars via the IMAP protocol.
No way via IMAP, no way via imapsync No way via IMAP, no way via imapsync
(but it can be done with other tools or via export/import of csv or ics files). but it can be done with other tools or via export/import of csv or ics files.
</p> </p>
<p> <p>
@ -105,7 +112,7 @@ See detailed explanation and motivation here when
<ul> <ul>
<li><b>4000 to 5000 </b>users per month (48000 users a year).</li> <li><b>4000 to 5000 </b>users per month (48000 users a year).</li>
<li>6 to 39 millions mailboxes transfers per month.</li> <li>6 to 39 millions mailboxes transfers per month.</li>
<li><b>158 millions</b> transfers for 2013, that is five whole mailboxes synced per second.</li> <li><b>158 millions</b> transfers for 2013, that is five whole mailboxes synced per second. 2014 should reach more than 300 millions transfers.</li>
<li><b>Operating systems</b> run by imapsync users (in 2013): <li><b>Operating systems</b> run by imapsync users (in 2013):
<ul> <ul>
@ -123,9 +130,9 @@ See detailed explanation and motivation here when
<p> <p>
Where all those numbers come from? Where all those numbers come from?
To know wether a newer imapsync exists or not imapsync does a http GET to the file <a href="http://imapsync.lamiral.info/VERSION">VERSION</a>. To know wether a newer imapsync exists or not, imapsync does a http GET to the file
<a href="http://imapsync.lamiral.info/VERSION">VERSION</a>.
Via the <b>User-agent</b> parameter it also sends:</p> Via the <b>User-agent</b> parameter it also sends:</p>
<ul> <ul>
<li>imapsync release</li> <li>imapsync release</li>
<li>Perl version</li> <li>Perl version</li>
@ -176,15 +183,15 @@ Check <a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4279">CV
--> -->
<ul> <ul>
<li><b>1.592</b> Logging by default! (internal feature)</li> <li><b>1.592</b> Logging by default! (an internal feature now)</li>
<li><b>Caveat to upgrade</b>: New <b>IO::Tee</b> Perl module dependency, for logging. See the <a href="INSTALL">INSTALL</a> file.</li> <li><b>Caveat to upgrade</b>: New <b>IO::Tee</b> Perl module dependency, for logging. See the <a href="INSTALL">INSTALL</a> file.</li>
<li><b>Windows upgrade</b>: Win32 binary is now distributed in a zip file with two batches scripts ready to use it.</li> <li><b>Windows upgrade</b>: Win32 binary is now distributed in a zip file with two batches scripts ready to use it.</li>
<li><b>Enhancement</b>: Added logging by default in subdirectory <b>LOG_imapsync/</b></li> <li><b>Enhancement</b>: Added logging by default in subdirectory <b>./LOG_imapsync/</b></li>
<li><b>Enhancement</b>: <b>Added option --log turned on by default</b>. Use --nolog to disable logging.</li> <li><b>Enhancement</b>: <b>Added option --log turned on by default</b>. Use --nolog to disable logging.</li>
<li><b>Enhancement</b>: Added option --logfile. Default is like LOG_imapsync/YYYY_MM_DD_HH_MM_SS_user2.txt <li><b>Enhancement</b>: Added option --logfile. Default is like ./LOG_imapsync/YYYY_MM_DD_HH_MM_SS_user2.txt
where YYYY_MM_DD_HH_MM_SS is the launching date and time like 2014_05_20_23_45_10</li> where YYYY_MM_DD_HH_MM_SS is the launching date and time like 2014_05_20_23_45_10</li>
<li><b>Enhancement</b>: Added option <b>--disarmreadreceipts</b> to fix resending read receipts on host2. A must with Exchange as host2.</li> <li><b>Enhancement</b>: Added option <b>--disarmreadreceipts</b> to fix resending read receipts on host2. A must with Exchange as host2.</li>
<li><b>Enhancement</b>: Added FTGate support (no EXAMINE imap command used anymore).</li> <li><b>Enhancement</b>: Added FTGate support (no EXAMINE imap command used anymore).</li>
@ -195,7 +202,7 @@ Check <a href="http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2013-4279">CV
<li><b>Bug fix</b>: Make TLS works with last IO::Socket::SSL default value (Added SSL_verify_mode => 'SSL_VERIFY_NONE') in --tls mode.</li> <li><b>Bug fix</b>: Make TLS works with last IO::Socket::SSL default value (Added SSL_verify_mode => 'SSL_VERIFY_NONE') in --tls mode.</li>
<li><b>Bug fix</b>: Fixed bug when creating folders on host2 with --sep2=\\ (Lotus Notes).</li> <li><b>Bug fix</b>: Fixed bug when creating folders on host2 with --sep2=\\ (Lotus Notes).</li>
<li><b>Bug fix</b>: Try to get folder size when a folder on host2 has the same name but with a different case <li><b>Bug fix</b>: Try to get folder size when a folder on host2 has the same name but with a different case
like OLD_MAIL -> old_mail. Avoid "does not exist" output.</li> like OLD_MAIL -> old_mail. This avoids "does not exist" output.</li>
</ul> </ul>
<ul> <ul>
@ -399,39 +406,25 @@ For <b>50 EUR</b> you will get:
<li><a href="NOLIMIT">No limit</a> to do anything with imapsync and its license.</li> <li><a href="NOLIMIT">No limit</a> to do anything with imapsync and its license.</li>
</ul> </ul>
<p> <p>
For <b>100 EUR more</b> you can get imapsync <b>full professional support</b>, For <b>100 EUR</b> you can get imapsync <b>full professional support</b>,
provided by the imapsync designer and developper, Gilles LAMIRAL the name. provided by the imapsync designer and developper (Gilles LAMIRAL) who has
</p> been supporting imap migrations since 2001.
<p>The support is done in English, <b>mostly by email</b> or eventually phone/skype
(office hours from 12:00 to 22:00 UTC).
<b>My English level has always been efficient to solve any technical issue</b>,
I like watching American movies with the original soundtrack.
</p>
<p><b>I've been supporting imap migrations since 2001</b>.
</p>
<p>The <b>support features helping you to get your imap migration job done</b>, quickly if possible.
Support includes things like how to deal with special imap server softwares,
choosing and explaining options, explaining error messages,
solving authentication issues,
dealing with speed, quotas,
running in parallel, etc.
</p> </p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<p> <p>
<input type="hidden" name="cmd" value="_s-xclick"/> <input type="hidden" name="cmd" value="_s-xclick"/>
<input type="hidden" name="hosted_button_id" value="H2YTURNFT4XT4"/> <input type="hidden" name="hosted_button_id" value="H2YTURNFT4XT4"/>
<input type="hidden" name="on0" value="imapsync choice"/>imapsync choice <input type="hidden" name="on0" value="imapsync choice"/>imapsync choice
<select name="os0"> <select name="os0">
<option value="Software only. For professional use.">Software only. For professional use. &euro;50,00 EUR</option> <option class="bold" value="Software only. For professional use.">Software only. For professional use. &euro;50,00 EUR</option>
<option value="Software + Support. For professional use.">Software + Support. For professional use. &euro;150,00 EUR</option>
<option value="Software only. For individual use.">Software only. For individual use. &euro;50,00 EUR</option> <option value="Software only. For individual use.">Software only. For individual use. &euro;50,00 EUR</option>
<option class="bold" value="Software + Support. For professional use.">Software + Support. For professional use. &euro;100,00 EUR</option>
<option value="Support only. For professional use.">Support only. For professional use. &euro;100,00 EUR</option>
</select> </select>
<br/> <br/>
<input type="hidden" name="on1" value="VAT if professional in Europe"/> <input type="hidden" name="on1" value="VAT if professional in Europe"/>
@ -448,23 +441,44 @@ name="submit" alt="PayPal - The safer, easier way to pay online!"/>
</p> </p>
</form> </form>
<p> <p>
You will be redirected to a <b>download link just after</b> the payment.<br/> You will be redirected to a <b>download link just after</b> the payment.<br/>
You will also receive an email from <b>gilles.lamiral@laposte.net</b> a few minutes later You will also receive an email from <b>gilles.lamiral@laposte.net</b> a few minutes later
(can fall in Spam folder sometimes).<br/> (can fall in Spam folder sometimes).<br/>
Please make sure the delivery postal address you enter for the invoice is your accounting department's, In order to get an accurate invoice, please make sure the delivery postal address you enter in Paypal
since revised editing is not easy and prohibited by law.<br/> suits your accounting department's, since revised editing is not easy and prohibited by law.<br/>
The gpg signed <b>invoice</b> will be sent within <b>a few days by email</b>. The gpg signed <b>invoice</b> will be sent within <b>a few days by email</b>.
</p> </p>
<p>For those of you who buy support <b>contact me</b> (Gilles LAMIRAL) by email or phone:</p> <p>If you can not pay with a credit card via Paypal then
you can use a bank transfer on this bank account:<br/>
NAME: <b>MR LAMIRAL GILLES</b> <br/>
IBAN: <b>FR76 1360 6000 9900 0332 2748 564</b> <br/>
Code BIC/Swift: <b>AGRIFRPP836</b>
</p>
<p>For those of you who buy support, <b>contact me</b> (Gilles LAMIRAL) by email or phone:</p>
<ul> <ul>
<li>Email address: <b>gilles.lamiral@laposte.net</b>.</li> <li>Email address: <b>gilles.lamiral@laposte.net</b>.</li>
<li>Professional phone number: <b>+33 951 84 42 42</b> (France) I can <b>call you back</b> toll-free in many countries.</li> <li>Professional phone number: <b>+33 951 84 42 42</b> located in France.</li>
<li>Mobile phone number: <b>+33 620 79 76 06</b> (France).</li> <li>Mobile phone number: <b>+33 620 79 76 06</b> located in France (SFR).</li>
<li>Jabber address: <b>gilleslamiral@jabber.org</b></li>
<li>Google+: <a href="https://plus.google.com/+GillesLamiral/">https://plus.google.com/+GillesLamiral/</a></li>
<li>Twitter: <a href="https://twitter.com/imapsync">https://twitter.com/imapsync</a></li>
<li>Facebook: <a href="https://www.facebook.com/imapsync">https://www.facebook.com/imapsync</a></li>
</ul> </ul>
<p>The support is done in English, <b>mostly by email</b> or eventually phone/skype/google+/jabber.
Office hours start at 10:00, end at 16:00 UTC, extra time is possible in case of emergency.
The <b>support aims at helping you to get your imap migration job done</b>, quickly if possible.
Support includes things like <b>no time to read the documentation</b>,
how to deal with special imap server softwares (Gmail, Exchange),
choosing and explaining options, explaining error messages,
solving authentication issues,
dealing with speed, quotas, special context,
running in parallel, etc.
</p>
<h2><a id="doc"></a>Documentation</h2> <h2><a id="doc"></a>Documentation</h2>
@ -683,7 +697,8 @@ that's my job.
part of the UW IMAP tookit.</li> part of the UW IMAP tookit.</li>
<li> imaprepl: <a href="http://www.bl0rg.net/software/">http://www.bl0rg.net/software/</a> <li> imaprepl: <a href="http://www.bl0rg.net/software/">http://www.bl0rg.net/software/</a>
<a href="http://freecode.com/projects/imap-repl/">http://freecode.com/projects/imap-repl/</a></li> <a href="http://freecode.com/projects/imap-repl/">http://freecode.com/projects/imap-repl/</a></li>
<li> imapcopy: <a href="http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html">http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html</a></li> <li> imapcopy (Pascal): <a href="http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html">http://home.arcor.de/armin.diehl/imapcopy/imapcopy.html</a></li>
<li> imapcopy (Java): <a href="https://code.google.com/p/imapcopy/">https://code.google.com/p/imapcopy/</a></li>
<li> migrationtool: <a href="http://sourceforge.net/projects/migrationtool/">http://sourceforge.net/projects/migrationtool/</a></li> <li> migrationtool: <a href="http://sourceforge.net/projects/migrationtool/">http://sourceforge.net/projects/migrationtool/</a></li>
<li> imapmigrate: <a href="http://sourceforge.net/projects/cyrus-utils/">http://sourceforge.net/projects/cyrus-utils/</a></li> <li> imapmigrate: <a href="http://sourceforge.net/projects/cyrus-utils/">http://sourceforge.net/projects/cyrus-utils/</a></li>
<li> larch: <a href="https://github.com/rgrove/larch">https://github.com/rgrove/larch</a> (derived from wonko_imapsync)</li> <li> larch: <a href="https://github.com/rgrove/larch">https://github.com/rgrove/larch</a> (derived from wonko_imapsync)</li>
@ -738,7 +753,7 @@ alt="Viewable With Any Browser" />
<!--#config timefmt="%D" --> <!--#config timefmt="%D" -->
<!--#config timefmt="%A %B %d, %Y" --> <!--#config timefmt="%A %B %d, %Y" -->
<b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b> <b>This document last modified on <!--#echo var="LAST_MODIFIED" --></b>
($Id: index.shtml,v 1.206 2014/05/29 23:41:08 gilles Exp gilles $) ($Id: index.shtml,v 1.220 2014/09/15 22:21:05 gilles Exp gilles $)
</p> </p>
</body> </body>

View file

@ -1,618 +0,0 @@
Missing "REQUIRED ARGUMENTS" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "DIAGNOSTICS" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "CONFIGURATION" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "DEPENDENCIES" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
Missing "INCOMPATIBILITIES" section in POD at line 1, column 1. See pages 133,138 of PBP. (Severity: 2)
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 (357) at line 1, column 1. Consider refactoring. (Severity: 3)
Magic punctuation variable used at line 567, 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 738, column 10. Unnamed numeric literals make code less maintainable. (Severity: 2)
Postfix control "if" used at line 755, column 23. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 763, column 32. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 774, 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 802, 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 803, column 48. Unnamed numeric literals make code less maintainable. (Severity: 2)
Postfix control "if" used at line 812, column 15. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 813, column 21. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 819, column 25. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 825, column 24. See pages 93,94 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 834, column 40. See page 79 of PBP. (Severity: 2)
Postfix control "if" used at line 835, column 27. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 846, 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 849, 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 850, 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 853, 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 853, 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 856, 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 856, column 30. Unnamed numeric literals make code less maintainable. (Severity: 2)
Postfix control "if" used at line 858, column 31. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 859, column 12. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 873, 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 898, column 21. Unnamed numeric literals make code less maintainable. (Severity: 2)
Long number not separated with underscores at line 985, column 20. See page 59 of PBP. (Severity: 2)
Postfix control "unless" used at line 987, column 57. See pages 96,97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1014, column 19. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1015, column 50. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1017, column 22. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1018, column 22. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 1025, column 26. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1032, column 49. See page 53 of PBP. (Severity: 2)
Postfix control "unless" used at line 1057, column 43. See pages 96,97 of PBP. (Severity: 2)
Postfix control "unless" used at line 1059, column 43. See pages 96,97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1062, column 34. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1063, column 34. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1134, column 33. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1134, column 33. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1136, column 46. See page 53 of PBP. (Severity: 2)
Expression form of "map" at line 1136, column 51. See page 169 of PBP. (Severity: 4)
Regular expression without "/s" flag at line 1144, column 33. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1144, column 33. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1146, column 46. See page 53 of PBP. (Severity: 2)
Expression form of "map" at line 1146, column 51. See page 169 of PBP. (Severity: 4)
Postfix control "if" used at line 1217, column 15. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1227, column 3. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1235, column 32. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1281, column 3. See page 97 of PBP. (Severity: 2)
"unless" block used at line 1289, column 3. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1321, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1322, column 50. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 1332, column 39. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 1334, column 50. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 1344, column 49. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 1345, column 30. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 1363, column 57. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1373, column 77. See pages 93,94 of PBP. (Severity: 2)
Double-sigil dereference at line 1376, column 2. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 1381, column 5. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1385, column 3. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1388, column 2. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1391, column 53. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1426, column 79. See pages 93,94 of PBP. (Severity: 2)
Double-sigil dereference at line 1430, column 2. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 1435, column 3. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1439, column 3. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1469, column 10. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1489, column 33. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1490, column 4. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1498, column 39. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1502, column 38. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1511, column 4. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1513, column 45. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1514, column 31. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1514, column 31. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 1516, column 7. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1517, column 32. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1518, column 5. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1526, column 52. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1527, column 4. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1535, column 39. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1539, column 38. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1548, column 4. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 1549, column 49. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1550, column 31. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1550, column 31. See page 237 of PBP. (Severity: 2)
"unless" block used at line 1551, column 5. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1580, column 70. See pages 93,94 of PBP. (Severity: 2)
Code structure is deeply nested at line 1581, column 41. Consider refactoring. (Severity: 3)
"unless" block used at line 1581, column 41. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1592, column 39. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1596, column 38. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 1660, column 47. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1661, column 59. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1663, column 4. See page 97 of PBP. (Severity: 2)
Postfix control "if" used at line 1666, column 23. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 1700, column 3. See page 97 of PBP. (Severity: 2)
"unless" block used at line 1704, column 3. See page 97 of PBP. (Severity: 2)
Postfix control "unless" used at line 1736, column 20. See pages 96,97 of PBP. (Severity: 2)
Postfix control "unless" used at line 1737, column 20. See pages 96,97 of PBP. (Severity: 2)
Postfix control "if" used at line 1741, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 1742, column 17. See pages 93,94 of PBP. (Severity: 2)
Too many arguments at line 1762, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 1772, column 58. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1773, column 58. See page 53 of PBP. (Severity: 2)
Too many arguments at line 1780, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 1790, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 1805, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1806, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1818, column 26. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1828, column 28. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1836, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1836, column 17. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1846, column 55. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1847, column 74. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 1852, column 58. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 1884, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1912, column 77. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1915, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1918, column 73. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1921, column 77. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1924, column 76. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1927, column 68. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1930, column 67. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1933, column 77. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1936, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1939, column 71. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1942, column 69. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1945, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1948, column 67. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1951, column 67. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 1954, column 69. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 1969, column 15. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 1969, column 15. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 1981, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 1988, column 5. See page 53 of PBP. (Severity: 2)
Too many arguments at line 2024, column 1. See page 182 of PBP. (Severity: 3)
Magic punctuation variable used in interpolated string at line 2035, column 17. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 2052, column 35. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2055, column 35. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 2069, column 14. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 2081, column 14. See pages 93,94 of PBP. (Severity: 2)
Too many arguments at line 2085, column 1. See page 182 of PBP. (Severity: 3)
Postfix control "if" used at line 2100, column 35. See pages 93,94 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 2117, column 17. See page 79 of PBP. (Severity: 2)
Too many arguments at line 2145, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 2156, column 38. See page 53 of PBP. (Severity: 2)
Postfix control "unless" used at line 2159, column 51. See pages 96,97 of PBP. (Severity: 2)
Postfix control "if" used at line 2163, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 2164, column 35. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 2166, column 32. See pages 93,94 of PBP. (Severity: 2)
"unless" block used at line 2170, column 2. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 2181, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2224, column 40. See page 53 of PBP. (Severity: 2)
Too many arguments at line 2248, column 1. See page 182 of PBP. (Severity: 3)
Postfix control "if" used at line 2273, column 41. See pages 93,94 of PBP. (Severity: 2)
Numeric escapes in interpolated string at line 2286, column 30. See page 56 of PBP. (Severity: 2)
Quotes used with an empty string at line 2288, column 41. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2306, column 32. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2306, column 32. See page 237 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2319, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2322, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2325, column 39. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2334, column 82. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2343, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2343, column 45. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2343, column 61. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2346, column 22. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2349, column 39. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2360, column 41. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2373, column 29. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 2379, column 5. See page 79 of PBP. (Severity: 2)
Subroutine "is_valid_directory" does not end with "return" at line 2384, column 1. See page 197 of PBP. (Severity: 4)
Return value of "close" ignored at line 2410, column 2. Check the return value of "close" for success. (Severity: 2)
"die" used instead of "croak" at line 2425, column 2. See page 283 of PBP. (Severity: 3)
Magic punctuation variable used in interpolated string at line 2430, column 12. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 2438, column 14. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2440, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2441, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2452, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2453, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2454, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2456, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2457, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2458, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2460, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2461, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2464, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2465, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2468, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2469, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2470, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2472, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2473, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2474, column 6. See page 53 of PBP. (Severity: 2)
Reused variable name in lexical scope: $imap2 at line 2540, column 9. Invent unique variable names. (Severity: 3)
Regular expression without "/s" flag at line 2553, column 25. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/x" flag at line 2553, column 25. See page 236 of PBP. (Severity: 3)
Regular expression without "/m" flag at line 2553, column 25. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2556, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/x" flag at line 2556, column 20. See page 236 of PBP. (Severity: 3)
Regular expression without "/m" flag at line 2556, column 20. See page 237 of PBP. (Severity: 2)
Mixed high and low-precedence booleans at line 2557, column 13. See page 70 of PBP. (Severity: 4)
Quotes used with an empty string at line 2557, column 26. See page 53 of PBP. (Severity: 2)
List of quoted literal words at line 2611, column 17. Use 'qw()' instead. (Severity: 2)
List of quoted literal words at line 2612, column 17. Use 'qw()' instead. (Severity: 2)
Double-sigil dereference at line 2677, column 28. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 2681, column 26. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 2690, column 36. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 2741, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2742, column 37. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2851, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2861, column 21. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2869, column 38. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2870, column 38. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2870, column 42. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2872, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2872, column 30. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2872, column 34. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2872, column 38. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2873, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2873, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2874, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2874, column 51. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2875, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2875, column 53. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2876, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2876, column 53. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2877, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2877, column 53. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2878, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2878, column 55. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2880, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2880, column 55. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2882, column 50. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2882, column 55. See page 53 of PBP. (Severity: 2)
Numeric escapes in interpolated string at line 2892, column 12. See page 56 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2895, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2895, column 14. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2896, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2896, column 14. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2897, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2897, column 14. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2898, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2898, column 21. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 2898, column 30. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2898, column 49. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2898, column 74. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2905, column 27. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2906, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2907, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2918, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2918, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2925, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2925, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2940, column 4. See page 53 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 a noisy string at line 2947, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2948, column 11. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2949, column 4. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2949, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2956, column 14. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2970, column 13. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2970, column 13. See page 237 of PBP. (Severity: 2)
Postfix control "unless" used at line 2976, column 4. See pages 96,97 of PBP. (Severity: 2)
Use 'eq' or hash instead of fixed-pattern regexps at line 2976, column 62. See pages 271,272 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 2976, column 62. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 2976, column 62. See page 237 of PBP. (Severity: 2)
Expression form of "eval" at line 2982, column 13. See page 161 of PBP. (Severity: 5)
Magic punctuation variable used at line 2984, column 49. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 2985, column 14. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 2993, column 28. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2993, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 2993, column 57. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 2994, column 28. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3002, column 42. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3002, column 42. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3003, column 17. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3003, column 21. See page 53 of PBP. (Severity: 2)
"unless" block used at line 3031, column 3. See page 97 of PBP. (Severity: 2)
Double-sigil dereference at line 3044, column 3. See page 228 of PBP. (Severity: 2)
Postfix control "if" used at line 3044, column 35. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3047, column 71. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3047, column 71. See page 79 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3050, column 100. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3050, column 100. See page 79 of PBP. (Severity: 2)
Double-sigil dereference at line 3052, column 15. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 3096, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3096, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3100, column 41. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3159, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3170, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3170, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3171, column 5. See page 53 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 3185, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3187, column 5. See page 53 of PBP. (Severity: 2)
Expression form of "eval" at line 3203, column 13. See page 161 of PBP. (Severity: 5)
Magic punctuation variable used at line 3205, column 45. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3206, column 10. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3217, column 14. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3219, column 14. See page 79 of PBP. (Severity: 2)
Double-sigil dereference at line 3220, column 37. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3220, column 54. See page 228 of PBP. (Severity: 2)
"unless" block used at line 3226, column 4. See page 97 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 3229, column 16. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 3240, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3250, column 5. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3258, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3258, column 17. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3261, column 28. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3261, column 28. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3262, column 23. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3267, column 17. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3273, column 6. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3286, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3286, column 21. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3287, column 44. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3290, column 24. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3298, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3298, column 21. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 3299, column 40. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3302, column 24. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 3324, column 67. See pages 93,94 of PBP. (Severity: 2)
Subroutine "select_msgs" does not end with "return" at line 3344, column 1. See page 197 of PBP. (Severity: 4)
Long number not separated with underscores at line 3428, column 63. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 3429, column 63. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 3450, column 45. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 3453, column 46. See page 59 of PBP. (Severity: 2)
Double-sigil dereference at line 3464, column 9. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3465, column 9. See page 228 of PBP. (Severity: 2)
"unless" block used at line 3468, column 3. See page 97 of PBP. (Severity: 2)
"unless" block used at line 3469, column 3. See page 97 of PBP. (Severity: 2)
Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3483, column 1. See page 197 of PBP. (Severity: 4)
Postfix control "if" used at line 3531, column 22. See pages 93,94 of PBP. (Severity: 2)
Subroutine "copy_message" with high complexity score (30) at line 3560, column 1. Consider refactoring. (Severity: 3)
Too many arguments at line 3560, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 3567, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3568, column 61. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 3578, column 41. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 3579, column 95. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 3634, column 19. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 3634, column 35. See page 53 of PBP. (Severity: 2)
Too many arguments at line 3651, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 3656, column 60. See page 53 of PBP. (Severity: 2)
"unless" block used at line 3658, column 2. See page 97 of PBP. (Severity: 2)
Quotes used with an empty string at line 3661, column 24. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 3663, column 34. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3688, column 3. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 3691, column 49. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3699, column 16. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3721, column 15. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3721, column 15. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 3726, column 37. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 3727, column 64. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 3734, column 16. See page 53 of PBP. (Severity: 2)
Subroutine "tests_subject" does not end with "return" at line 3745, column 1. See page 197 of PBP. (Severity: 4)
Quotes used with an empty string at line 3746, column 6. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3746, column 21. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 3786, column 6. See page 53 of PBP. (Severity: 2)
Too many arguments at line 3808, column 1. See page 182 of PBP. (Severity: 3)
Quotes used with an empty string at line 3817, column 58. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3829, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3829, column 20. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 3844, column 75. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 3844, column 75. See page 237 of PBP. (Severity: 2)
Subroutine "sleep_if_needed" does not end with "return" at line 3864, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $total_bytes_transferred at line 3865, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3865, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3877, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxmessagespersecond at line 3877, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $total_bytes_transferred at line 3898, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxbytespersecond at line 3898, column 9. Invent unique variable names. (Severity: 3)
Postfix control "if" used at line 3926, column 28. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 3934, column 10. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 3967, column 2. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3967, column 22. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3968, column 2. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3968, column 22. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 3970, column 26. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4027, column 37. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4028, column 37. See page 228 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4041, column 23. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4041, column 23. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 4068, column 50. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 4115, column 35. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4115, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4115, column 57. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4115, column 68. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4115, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4116, column 35. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4116, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4116, column 57. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4116, column 68. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4116, column 79. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4116, column 90. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 4120, column 37. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4121, column 37. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 4163, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4163, column 43. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4163, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4163, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4163, column 76. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4164, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4164, column 43. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4164, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4164, column 65. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4164, column 76. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4164, column 87. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 4167, column 34. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4168, column 34. See page 228 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4183, column 16. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4183, column 16. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 4196, column 47. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 4228, column 78. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4229, column 21. See page 228 of PBP. (Severity: 2)
Quotes used with an empty string at line 4232, column 102. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4241, column 29. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 4241, column 29. See page 79 of PBP. (Severity: 2)
Quotes used with an empty string at line 4280, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4281, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4285, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4286, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4287, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4331, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4332, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4333, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4337, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4338, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4339, column 24. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4366, column 49. See page 53 of PBP. (Severity: 2)
Mismatched operator at line 4366, column 75. Numeric/string operators and operands should match. (Severity: 3)
Quotes used with an empty string at line 4415, column 33. See page 53 of PBP. (Severity: 2)
Hard tabs used at line 4450, column 10. See page 20 of PBP. (Severity: 3)
Quotes used with an empty string at line 4485, column 43. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4486, column 44. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4487, column 48. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4498, column 25. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4499, column 25. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4515, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4515, column 21. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4517, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4517, column 20. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4541, column 13. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4541, column 13. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 4547, column 5. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4547, column 32. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4547, column 36. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4548, column 46. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4549, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4552, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 4553, column 60. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4574, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4575, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4591, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4592, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4595, column 15. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4604, column 15. See page 53 of PBP. (Severity: 2)
Expression form of "eval" at line 4721, column 13. See page 161 of PBP. (Severity: 5)
Magic punctuation variable used at line 4723, column 38. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 4724, column 10. See page 79 of PBP. (Severity: 2)
Long number not separated with underscores at line 4737, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4738, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4740, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4741, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4743, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4744, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4746, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4747, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4749, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4750, column 46. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 4752, column 49. See page 59 of PBP. (Severity: 2)
Quotes used with an empty string at line 4761, column 23. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 4807, column 65. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 4866, column 31. See pages 93,94 of PBP. (Severity: 2)
Too many arguments at line 4877, column 1. See page 182 of PBP. (Severity: 3)
Double-sigil dereference at line 4881, column 29. See page 228 of PBP. (Severity: 2)
Double-sigil dereference at line 4892, column 43. See page 228 of PBP. (Severity: 2)
Postfix control "unless" used at line 4915, column 29. See pages 96,97 of PBP. (Severity: 2)
Double-sigil dereference at line 4941, column 29. See page 228 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4952, column 30. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4952, column 30. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4967, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4967, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4970, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4970, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4973, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4973, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4976, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4976, column 24. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 4979, column 98. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 4979, column 98. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 4992, column 37. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 4992, column 41. See page 53 of PBP. (Severity: 2)
Numeric escapes in interpolated string at line 4997, column 51. See page 56 of PBP. (Severity: 2)
Quotes used with an empty string at line 5007, column 21. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5009, column 52. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5011, column 9. Check the return value of "close" for success. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5020, column 46. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5022, column 2. Check the return value of "close" for success. (Severity: 2)
Quotes used with an empty string at line 5023, column 14. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5029, column 67. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5031, column 2. Check the return value of "close" for success. (Severity: 2)
Regular expression without "/s" flag at line 5046, column 21. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5046, column 21. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5070, column 24. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5070, column 24. See page 237 of PBP. (Severity: 2)
Magic punctuation variable used at line 5087, column 18. See page 79 of PBP. (Severity: 2)
Return value of "close" ignored at line 5110, column 2. Check the return value of "close" for success. (Severity: 2)
Magic punctuation variable used in interpolated string at line 5130, column 20. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used at line 5144, column 23. See page 79 of PBP. (Severity: 2)
Magic punctuation variable used at line 5146, column 7. See page 79 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5146, column 13. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5146, column 13. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5161, column 20. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 5163, column 11. See page 53 of PBP. (Severity: 2)
Backtick operator used at line 5190, column 12. Use IPC::Open3 instead. (Severity: 3)
Backtick operator used at line 5210, column 11. Use IPC::Open3 instead. (Severity: 3)
String delimiter used with "split" at line 5215, column 28. Express it as a regex instead. (Severity: 2)
Quotes used with a noisy string at line 5215, column 34. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5279, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5279, column 17. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5288, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5288, column 17. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5326, column 13. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5329, column 17. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5329, column 17. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5332, column 16. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 5332, column 30. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 5333, column 22. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5338, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5338, column 12. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5350, column 38. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5350, column 72. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5350, column 72. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5351, column 38. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5353, column 46. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5357, column 30. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5359, column 34. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5364, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5364, column 12. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5380, column 19. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5380, column 19. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5393, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5393, column 12. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5399, column 29. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5405, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5405, column 12. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5416, column 12. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5416, column 12. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5437, column 5. See page 53 of PBP. (Severity: 2)
Double-sigil dereference at line 5490, column 33. See page 228 of PBP. (Severity: 2)
Expression form of "eval" at line 5511, column 43. See page 161 of PBP. (Severity: 5)
Expression form of "eval" at line 5515, column 45. See page 161 of PBP. (Severity: 5)
Postfix control "if" used at line 5520, column 34. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 5521, column 36. See pages 93,94 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5535, column 33. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5535, column 33. See page 237 of PBP. (Severity: 2)
Quotes used with an empty string at line 5536, column 36. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5574, column 27. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5574, column 27. See page 237 of PBP. (Severity: 2)
Use 'eq' or hash instead of fixed-pattern regexps at line 5578, column 36. See pages 271,272 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5578, column 36. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5578, column 36. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5580, column 31. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5580, column 31. See page 237 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5586, column 34. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5586, column 34. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5589, column 65. See pages 93,94 of PBP. (Severity: 2)
Quotes used with an empty string at line 5715, column 17. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 5720, column 20. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 5720, column 20. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 5726, column 28. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5726, column 33. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 5727, column 28. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5727, column 33. See page 53 of PBP. (Severity: 2)
Long number not separated with underscores at line 5760, column 55. See page 59 of PBP. (Severity: 2)
"$i" is declared but not used at line 5779, column 9. Unused variables clutter code and make it harder to read. (Severity: 3)
Quotes used with an empty string at line 5790, column 28. See page 53 of PBP. (Severity: 2)
Long number not separated with underscores at line 5798, column 40. See page 59 of PBP. (Severity: 2)
Quotes used with an empty string at line 5811, column 14. See page 53 of PBP. (Severity: 2)
Quotes used with an empty string at line 5812, column 32. See page 53 of PBP. (Severity: 2)
Long number not separated with underscores at line 5823, column 57. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 5824, column 57. See page 59 of PBP. (Severity: 2)
Long number not separated with underscores at line 5825, column 68. See page 59 of PBP. (Severity: 2)
Reused variable name in lexical scope: $logfile at line 5831, column 2. Invent unique variable names. (Severity: 3)
Subroutine "teelaunch" does not end with "return" at line 5838, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $logfile at line 5839, column 2. Invent unique variable names. (Severity: 3)
Magic punctuation variable used in interpolated string at line 5840, column 36. See page 79 of PBP. (Severity: 2)
Close filehandles as soon as possible after opening them at line 5842, column 2. See page 209 of PBP. (Severity: 4)
"die" used instead of "croak" at line 5843, column 7. See page 283 of PBP. (Severity: 3)
Magic punctuation variable used in interpolated string at line 5843, column 12. See page 79 of PBP. (Severity: 2)
Magic variable "*STDERR" should be assigned as "local" at line 5845, column 10. See pages 81,82 of PBP. (Severity: 4)
Double-sigil dereference at line 5845, column 12. See page 228 of PBP. (Severity: 2)
One-argument "select" used at line 5846, column 2. See page 224 of PBP. (Severity: 4)
Quotes used with an empty string at line 5852, column 25. See page 53 of PBP. (Severity: 2)
Postfix control "if" used at line 5853, column 43. See pages 93,94 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5854, column 54. See page 53 of PBP. (Severity: 2)
Quotes used with a noisy string at line 5854, column 60. See page 53 of PBP. (Severity: 2)
Magic punctuation variable used in interpolated here-document at line 5855, column 15. See page 79 of PBP. (Severity: 2)
Quotes used with a noisy string at line 6106, column 20. See page 53 of PBP. (Severity: 2)
Regular expression without "/s" flag at line 6111, column 14. See pages 240,241 of PBP. (Severity: 2)
Regular expression without "/m" flag at line 6111, column 14. See page 237 of PBP. (Severity: 2)
Postfix control "if" used at line 6259, column 49. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6272, column 12. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6276, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "unless" used at line 6279, column 30. See pages 96,97 of PBP. (Severity: 2)
Postfix control "if" used at line 6287, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6297, column 32. See pages 93,94 of PBP. (Severity: 2)
Postfix control "if" used at line 6365, column 33. See pages 93,94 of PBP. (Severity: 2)

View file

@ -1,49 +0,0 @@
Main code has high complexity score (357) at line 1, column 1. Consider refactoring. (Severity: 3)
Expression form of "map" at line 1136, column 51. See page 169 of PBP. (Severity: 4)
Expression form of "map" at line 1146, column 51. See page 169 of PBP. (Severity: 4)
Code structure is deeply nested at line 1581, column 41. Consider refactoring. (Severity: 3)
Too many arguments at line 1762, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 1780, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 1790, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2024, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2085, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2145, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 2248, column 1. See page 182 of PBP. (Severity: 3)
Subroutine "is_valid_directory" does not end with "return" at line 2384, column 1. See page 197 of PBP. (Severity: 4)
"die" used instead of "croak" at line 2425, column 2. See page 283 of PBP. (Severity: 3)
Reused variable name in lexical scope: $imap2 at line 2540, column 9. Invent unique variable names. (Severity: 3)
Regular expression without "/x" flag at line 2553, column 25. See page 236 of PBP. (Severity: 3)
Regular expression without "/x" flag at line 2556, column 20. See page 236 of PBP. (Severity: 3)
Mixed high and low-precedence booleans at line 2557, column 13. See page 70 of PBP. (Severity: 4)
Expression form of "eval" at line 2982, column 13. See page 161 of PBP. (Severity: 5)
Expression form of "eval" at line 3203, column 13. See page 161 of PBP. (Severity: 5)
Subroutine "select_msgs" does not end with "return" at line 3344, column 1. See page 197 of PBP. (Severity: 4)
Subroutine "tests_msgs_from_maxmin" does not end with "return" at line 3483, column 1. See page 197 of PBP. (Severity: 4)
Subroutine "copy_message" with high complexity score (30) at line 3560, column 1. Consider refactoring. (Severity: 3)
Too many arguments at line 3560, column 1. See page 182 of PBP. (Severity: 3)
Too many arguments at line 3651, column 1. See page 182 of PBP. (Severity: 3)
Subroutine "tests_subject" does not end with "return" at line 3745, column 1. See page 197 of PBP. (Severity: 4)
Too many arguments at line 3808, column 1. See page 182 of PBP. (Severity: 3)
Subroutine "sleep_if_needed" does not end with "return" at line 3864, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $total_bytes_transferred at line 3865, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3865, column 2. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $nb_msg_transferred at line 3877, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxmessagespersecond at line 3877, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $total_bytes_transferred at line 3898, column 9. Invent unique variable names. (Severity: 3)
Reused variable name in lexical scope: $maxbytespersecond at line 3898, column 9. Invent unique variable names. (Severity: 3)
Mismatched operator at line 4366, column 75. Numeric/string operators and operands should match. (Severity: 3)
Hard tabs used at line 4450, column 10. See page 20 of PBP. (Severity: 3)
Expression form of "eval" at line 4721, column 13. See page 161 of PBP. (Severity: 5)
Too many arguments at line 4877, column 1. See page 182 of PBP. (Severity: 3)
Backtick operator used at line 5190, column 12. Use IPC::Open3 instead. (Severity: 3)
Backtick operator used at line 5210, column 11. Use IPC::Open3 instead. (Severity: 3)
Expression form of "eval" at line 5511, column 43. See page 161 of PBP. (Severity: 5)
Expression form of "eval" at line 5515, column 45. See page 161 of PBP. (Severity: 5)
"$i" is declared but not used at line 5779, column 9. Unused variables clutter code and make it harder to read. (Severity: 3)
Reused variable name in lexical scope: $logfile at line 5831, column 2. Invent unique variable names. (Severity: 3)
Subroutine "teelaunch" does not end with "return" at line 5838, column 1. See page 197 of PBP. (Severity: 4)
Reused variable name in lexical scope: $logfile at line 5839, column 2. Invent unique variable names. (Severity: 3)
Close filehandles as soon as possible after opening them at line 5842, column 2. See page 209 of PBP. (Severity: 4)
"die" used instead of "croak" at line 5843, column 7. See page 283 of PBP. (Severity: 3)
Magic variable "*STDERR" should be assigned as "local" at line 5845, column 10. See pages 81,82 of PBP. (Severity: 4)
One-argument "select" used at line 5846, column 2. See page 224 of PBP. (Severity: 4)

View file

@ -1,6 +1,6 @@
#!/bin/sh #!/bin/sh
# $Id: tests.sh,v 1.238 2014/05/22 10:02:14 gilles Exp gilles $ # $Id: tests.sh,v 1.240 2014/09/19 19:36:25 gilles Exp gilles $
# Example 1: # Example 1:
# CMD_PERL='perl -I./W/Mail-IMAPClient-3.35/lib' sh -x tests.sh # CMD_PERL='perl -I./W/Mail-IMAPClient-3.35/lib' sh -x tests.sh
@ -507,7 +507,7 @@ ll_change_blank() {
--passfile1 ../../var/pass/secret.tata \ --passfile1 ../../var/pass/secret.tata \
--host2 $HOST2 --user2 titi \ --host2 $HOST2 --user2 titi \
--passfile2 ../../var/pass/secret.titi \ --passfile2 ../../var/pass/secret.titi \
--justfolders --nofoldersizes --justfolders --nofoldersizes --folder "INBOX. blanc_begin" --regextrans2 "s,(\.|^) +,\$1,g"
} }
@ -2639,6 +2639,22 @@ xxxxx_gmail_8_xlist() {
} }
xxxxx_gmail_9_via_stunnel() {
! ping -c1 imap.gmail.com || $CMD_PERL ./imapsync \
--host1 $HOST2 \
--user1 tata \
--passfile1 ../../var/pass/secret.tata \
--host2 localhost \
--port2 9993 \
--user2 gilles.lamiral@gmail.com \
--passfile2 ../../var/pass/secret.gilles_gmail \
--foldersizes \
--folder INBOX
}
gmail_xxxxx() { gmail_xxxxx() {