{
$File::Util::Exception::Diagnostic::VERSION
=
'4.130500'
;
}
@ISA $AUTHORITY
@EXPORT_OK %EXPORT_TAGS
)
;
$AUTHORITY
=
'cpan:TOMMY'
;
@ISA
=
qw( Exporter File::Util::Exception )
;
@EXPORT_OK
= (
'_errors'
,
@File::Util::Exception::EXPORT_OK
);
%EXPORT_TAGS
= (
all
=> [
@EXPORT_OK
] );
sub
_errors {
my
(
$class
,
$error_thrown
) =
@_
;
$error_thrown
||=
$class
;
my
%error_msg_table
= (
'no such file'
=>
<<'__bad_open__',
$opts->{_pak} can't open
$EBL$opts->{filename}$EBR
because it is inaccessible or does not exist.
Origin: This is *most likely* due to human error.
Solution: Cannot diagnose. A human must investigate the problem.
__bad_open__
'bad flock rules'
=>
<<'__bad_lockrules__',
Invalid file locking policy can not be implemented. $opts->{_pak}::flock_rules
does not accept one or more of the policy keywords passed to this method.
Invalid Policy specified: $EBL@{[
join ' ', map { '[undef]' unless defined $_ } @{ $opts->{all} } ]}$EBR
flock_rules policy in effect before invalid policy failed:
$EBL@ONLOCKFAIL$EBR
Proper flock_rules policy includes one or more of the following recognized
keywords specified in order of precedence:
BLOCK waits to try getting an exclusive lock
FAIL dies with stack trace
WARN warn()s about the error with a stack trace
IGNORE ignores the failure to get an exclusive lock
UNDEF returns undef
ZERO returns 0
Origin: This is a human error.
Solution: A human must fix the programming flaw.
__bad_lockrules__
'cant fread'
=>
<<'__cant_read__',
Permissions conflict. $opts->{_pak} can't read the contents of this file:
$EBL$opts->{filename}$EBR
Due to insufficient permissions, the system has denied Perl the right to
view the contents of this file. It has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{filename}))[2] & 0777) ]}$EBR
The directory housing it has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{dirname}))[2] & 0777) ]}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
Origin: This is *most likely* due to human error. External system errors
can occur however, but this doesn't have to do with $opts->{_pak}.
Solution: A human must fix the conflict by adjusting the file permissions
of directories where a program asks $opts->{_pak} to perform I/O.
Try using Perl's chmod command, or the native system chmod()
command from a shell.
__cant_read__
'cant fread not found'
=>
<<'__cant_read__',
File not found. $opts->{_pak} can't read the contents of this file:
$EBL$opts->{filename}$EBR
The file specified does not exist. It can not be opened or read from.
Origin: This is *most likely* due to human error. External system errors
can occur however, but this doesn't have to do with $opts->{_pak}.
Solution: A human must investigate why the application tried to open a
non-existent file, and/or why the file is expected to exist and
is not found.
__cant_read__
'cant fcreate'
=>
<<'__cant_write__',
Permissions conflict. $opts->{_pak} can't create this file:
$EBL$opts->{filename}$EBR
$opts->{_pak} can't create this file because the system has denied Perl
the right to create files in the parent directory.
The -e test returns $EBL@{[-e $opts->{dirname} ]}$EBR for the directory.
The -r test returns $EBL@{[-r $opts->{dirname} ]}$EBR for the directory.
The -R test returns $EBL@{[-R $opts->{dirname} ]}$EBR for the directory.
The -w test returns $EBL@{[-w $opts->{dirname} ]}$EBR for the directory
The -W test returns $EBL@{[-w $opts->{dirname} ]}$EBR for the directory
Parent directory: (path may be relative and/or redundant)
$EBL$opts->{dirname}$EBR
Parent directory has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{dirname}))[2] & 0777) ]}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
Origin: This is *most likely* due to human error. External system errors
can occur however, but this doesn't have to do with $opts->{_pak}.
Solution: A human must fix the conflict by adjusting the file permissions
of directories where a program asks $opts->{_pak} to perform I/O.
Try using Perl's chmod command, or the native system chmod()
command from a shell.
__cant_write__
'cant write_file on a dir'
=>
<<'__bad_writefile__',
$opts->{_pak} can't write to the specified file because it already exists
as a directory.
$EBL$opts->{filename}$EBR
Origin: This is a human error.
Solution: Resolve naming issue between the existent directory and the file
you wish to create/write/append.
__bad_writefile__
'cant touch on a dir'
=>
<<'__bad_touchfile__',
$opts->{_pak} can't touch the specified file because it already exists
as a directory.
$EBL$opts->{filename}$EBR
Origin: This is a human error.
Solution: Resolve naming issue between the existent directory and the file
you wish to touch.
__bad_touchfile__
'cant fwrite'
=>
<<'__cant_write__',
Permissions conflict. $opts->{_pak} can't write to this file:
$EBL$opts->{filename}$EBR
Due to insufficient permissions, the system has denied Perl the right
to modify the contents of this file. It has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{filename}))[2] & 0777) ]}$EBR
Parent directory has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{dirname}))[2] & 0777) ]}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
Origin: This is *most likely* due to human error. External system errors
can occur however, but this doesn't have to do with $opts->{_pak}.
Solution: A human must fix the conflict by adjusting the file permissions
of directories where a program asks $opts->{_pak} to perform I/O.
Try using Perl's chmod command, or the native system chmod()
command from a shell.
__cant_write__
'bad openmode popen'
=>
<<'__bad_openmode__',
Illegal mode specified for file open. $opts->{_pak} can't open this file:
$EBL$opts->{filename}$EBR
When calling $opts->{_pak}::$opts->{meth}() you specified that the file
opened in this I/O operation should be opened in $EBL$opts->{badmode}$EBR
but that is not a recognized open mode.
Supported open modes for $opts->{_pak}::write_file() are:
write - open the file in write mode, creating it if necessary, and
overwriting any existing contents of the file.
append - open the file in append mode
Supported open modes for $opts->{_pak}::open_handle() are the same as above, but
also include the following:
read - open the file in read-only mode
(and if the --use-sysopen flag is used):
rwcreate - open the file for update (read+write), creating it if necessary
rwupdate - open the file for update (read+write). Causes fatal error if
the file doesn't yet exist
rwappend - open the file for update in append mode
rwclobber - open the file for update, erasing all contents (truncating,
i.e- "clobbering" the file first)
Origin: This is a human error.
Solution: A human must fix the programming flaw by specifying the desired
open mode from the list above.
__bad_openmode__
'bad openmode sysopen'
=>
<<'__bad_openmode__',
Illegal mode specified for file sysopen. $opts->{_pak} can't sysopen this file:
$EBL$opts->{filename}$EBR
When calling $opts->{_pak}::$opts->{meth}() you specified that the file
opened in this I/O operation should be sysopen()'d in $EBL$opts->{badmode}$EBR
but that is not a recognized open mode.
Supported open modes for $opts->{_pak}::write_file() are:
write - open the file in write mode, creating it if necessary, and
overwriting any existing contents of the file.
append - open the file in append mode
Supported open modes for $opts->{_pak}::open_handle() are the same as above, but
also include the following:
read - open the file in read-only mode
(and if the --use-sysopen flag is used, as the application JUST did):
rwcreate - open the file for update (read+write), creating it if necessary
rwupdate - open the file for update (read+write). Causes fatal error if
the file doesn't yet exist
rwappend - open the file for update in append mode
rwclobber - open the file for update, erasing all contents (truncating,
i.e- "clobbering" the file first)
Origin: This is a human error.
Solution: A human must fix the programming flaw by specifying the desired
sysopen mode from the list above.
__bad_openmode__
'cant dread'
=>
<<'__cant_read__',
Permissions conflict. $opts->{_pak} can't list the contents of this directory:
$EBL$opts->{dirname}$EBR
Due to insufficient permissions, the system has denied Perl the right to
view the contents of this directory. It has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{dirname}))[2] & 0777) ]}$EBR
Origin: This is *most likely* due to human error. External system errors
can occur however, but this doesn't have to do with $opts->{_pak}.
Solution: A human must fix the conflict by adjusting the file permissions
of directories where a program asks $opts->{_pak} to perform I/O.
Try using Perl's chmod command, or the native system chmod()
command from a shell.
__cant_read__
'cant dcreate'
=>
<<'__cant_dcreate__',
Permissions conflict. $opts->{_pak} can't create:
$EBL$opts->{dirname}$EBR
$opts->{_pak} can't create this directory because the system has denied
Perl the right to create files in the parent directory.
Parent directory: (path may be relative and/or redundant)
$EBL$opts->{parentd}$EBR
Parent directory has a bitmask of: (octal number)
$EBL@{[ sprintf('%04o',(stat($opts->{parentd}))[2] & 0777) ]}$EBR
Origin: This is *most likely* due to human error. External system errors
can occur however, but this doesn't have to do with $opts->{_pak}.
Solution: A human must fix the conflict by adjusting the file permissions
of directories where a program asks $opts->{_pak} to perform I/O.
Try using Perl's chmod command, or the native system chmod()
command from a shell.
__cant_dcreate__
'make_dir target exists'
=>
<<'__cant_dcreate__',
make_dir target already exists.
$EBL$opts->{dirname}$EBR
$opts->{_pak} can't create the directory you specified because that
directory already exists, with filetype attributes of
@{[join(', ', @{ $opts->{filetype} })]} and permissions
set to $EBL@{[ sprintf('%04o',(stat($opts->{dirname}))[2] & 0777) ]}$EBR
Origin: This is *most likely* due to human error. The program has tried
to make a directory where a directory already exists.
Solution: Weaken the requirement somewhat by using the "--if-not-exists"
flag when calling the make_dir object method. This option
will cause $opts->{_pak} to ignore attempts to create directories
that already exist, while still creating the ones that don't.
__cant_dcreate__
'bad open'
=>
<<'__bad_open__',
$opts->{_pak} can't open this file for $EBL$opts->{mode}$EBR:
$EBL$opts->{filename}$EBR
The system returned this error:
$EBL$opts->{exception}$EBR
$opts->{_pak} used this directive in its attempt to open the file
$EBL$opts->{cmd}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
Origin: This is *most likely* due to human error.
Solution: Cannot diagnose. A Human must investigate the problem.
__bad_open__
'bad close'
=>
<<'__bad_close__',
$opts->{_pak} couldn't close this file after $EBL$opts->{mode}$EBR
$EBL$opts->{filename}$EBR
The system returned this error:
$EBL$opts->{exception}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
Origin: Could be either human _or_ system error.
Solution: Cannot diagnose. A Human must investigate the problem.
__bad_close__
'bad systrunc'
=>
<<'__bad_systrunc__',
$opts->{_pak} couldn't truncate() on $EBL$opts->{filename}$EBR after having
successfully opened the file in write mode.
The system returned this error:
$EBL$opts->{exception}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
This is most likely _not_ a human error, but has to do with your system's
support for the C truncate() function.
__bad_systrunc__
'bad flock'
=>
<<'__bad_lock__',
$opts->{_pak} can't get a lock on the file
$EBL$opts->{filename}$EBR
The system returned this error:
$EBL$opts->{exception}$EBR
Current flock_rules policy:
$EBL@ONLOCKFAIL$EBR
Origin: Could be either human _or_ system error.
Solution: Investigate the reason why you can't get a lock on the file,
it is usually because of improper programming which causes
race conditions on one or more files.
__bad_lock__
'called open on a dir'
=>
<<'__bad_open__',
$opts->{_pak} can't call open() on this file because it is a directory
$EBL$opts->{filename}$EBR
Origin: This is a human error.
Solution: Use $opts->{_pak}::load_file() to load the contents of a file
Use $opts->{_pak}::list_dir() to list the contents of a directory
__bad_open__
'called opendir on a file'
=>
<<'__bad_open__',
$opts->{_pak} can't opendir() on this file because it is not a directory.
$EBL$opts->{filename}$EBR
Use $opts->{_pak}::load_file() to load the contents of a file
Use $opts->{_pak}::list_dir() to list the contents of a directory
Origin: This is a human error.
Solution: Use $opts->{_pak}::load_file() to load the contents of a file
Use $opts->{_pak}::list_dir() to list the contents of a directory
__bad_open__
'called mkdir on a file'
=>
<<'__bad_open__',
$opts->{_pak} can't auto-create a directory for this path name because it
already exists as a file.
$EBL$opts->{filename}$EBR
Origin: This is a human error.
Solution: Resolve naming issue between the existent file and the directory
you wish to create.
__bad_open__
'bad read_limit'
=>
<<'__read_limit__',
Bad call to $opts->{_pak}::read_limit(). This method can only be called with
a numeric value (bytes). Non-integer numbers will be converted to integer
format if specified (numbers like 5.2), but don't do that, it's inefficient.
This operation aborted.
Origin: This is a human error.
Solution: A human must fix the programming flaw.
__read_limit__
'read_limit exceeded'
=>
<<'__read_limit__',
$opts->{_pak} can't load file: $EBL$opts->{filename}$EBR
into memory because its size exceeds the maximum file size allowed
for a read.
The size of this file is $EBL$opts->{size}$EBR bytes.
Currently the read limit is set at $EBL$opts->{read_limit}$EBR bytes.
Origin: This is a human error.
Solution: Consider setting the limit to a higher number of bytes.
__read_limit__
'bad abort_depth'
=>
<<'__abort_depth__',
Bad call to $opts->{_pak}::abort_depth(). This method can only be called with
a numeric value (bytes). Non-integer numbers will be converted to integer
format if specified (numbers like 5.2), but don't do that, it's inefficient.
This operation aborted.
Origin: This is a human error.
Solution: A human must fix the programming flaw.
__abort_depth__
'abort_depth exceeded'
=>
<<'__abort_depth__',
Recursion limit reached at $EBL${\ scalar(
(exists $opts->{abort_depth} && defined $opts->{abort_depth}) ?
$opts->{abort_depth} : $ABORT_DEPTH)
}$EBR dives. Maximum number of subdirectory dives is set to the value returned
by $opts->{_pak}::abort_depth(). Try manually setting the value to a higher
number before calling list_dir() with option --follow or --recurse (synonymous).
Do so by calling $opts->{_pak}::abort_depth() with the numeric argument
corresponding to the maximum number of subdirectory dives you want to allow when
traversing directories recursively.
This operation aborted.
Origin: This is a human error.
Solution: Consider setting the limit to a higher number.
__abort_depth__
'bad opendir'
=>
<<'__bad_opendir__',
$opts->{_pak} can't opendir on directory:
$EBL$opts->{dirname}$EBR
The system returned this error:
$EBL$opts->{exception}$EBR
Origin: Could be either human _or_ system error.
Solution: Cannot diagnose. A Human must investigate the problem.
__bad_opendir__
'bad make_dir'
=>
<<'__bad_make_dir__',
$opts->{_pak} had a problem with the system while attempting to create the
directory you specified with a bitmask of $EBL$opts->{bitmask}$EBR
directory: $EBL$opts->{dirname}$EBR
The system returned this error:
$EBL$opts->{exception}$EBR
Origin: Could be either human _or_ system error.
Solution: Cannot diagnose. A Human must investigate the problem.
__bad_make_dir__
'bad chars'
=>
<<'__bad_chars__',
$opts->{_pak} can't use this string for $EBL$opts->{purpose}$EBR.
$EBL$opts->{string}$EBR
It contains illegal characters.
Illegal characters are:
\\ (backslash)
/ (forward slash)
: (colon)
| (pipe)
* (asterisk)
? (question mark)
" (double quote)
< (less than)
> (greater than)
\\t (tab)
\\ck (vertical tabulator)
\\r (newline CR)
\\n (newline LF)
Origin: This is a human error.
Solution: A human must remove the illegal characters from this string.
__bad_chars__
'not a filehandle'
=>
<<'__bad_handle__',
$opts->{_pak} can't unlock file with an invalid file handle reference:
$EBL$opts->{argtype}$EBR is not a valid filehandle
Origin: This is most likely a human error, although it is remotely possible
that this message is the result of an internal error in the
$opts->{_pak} module, but this is not likely if you called
$opts->{_pak}'s internal ::_release() method directly on your own.
Solution: A human must fix the programming flaw. Alternatively, in the second
listed scenario the package maintainer must investigate the problem.
Please submit a bug report with this error message in its entirety
__bad_handle__
'no input'
=>
<<'__no_input__',
$opts->{_pak} can't honor your call to $EBL$opts->{_pak}::$opts->{meth}()$EBR
because you didn't provide $EBL@{[$opts->{missing}||'the required input']}$EBR
Origin: This is a human error.
Solution: A human must fix the programming flaw.
__no_input__
'plain error'
=>
<<'__plain_error__',
$opts->{_pak} failed with the following message:
${\ scalar ($_[0] || ((exists $opts->{error} && defined $opts->{error}) ?
$opts->{error} : '[error unspecified]')) }
__plain_error__
'unknown error message'
=>
<<'__foobar_input__',
$opts->{_pak} failed with an invalid error-type designation.
Origin: This is a bug! Please file a bug report at
Solution: A human must fix the programming flaw.
__foobar_input__
'empty error'
=>
<<'__no_input__',
$opts->{_pak} failed with an empty error-type designation.
Origin: This is a human error.
Solution: A human must fix the programming flaw.
__no_input__
);
exists
$error_msg_table
{
$error_thrown
}
?
$error_msg_table
{
$error_thrown
}
:
$error_msg_table
{
'unknown error message'
}
}
sub
DESTROY { }
1;