Claude-Agent
view release on metacpan or search on metacpan
examples/09-error-handling.pl view on Meta::CPAN
#!/usr/bin/env perl
#
# Error Handling Example
#
# This example demonstrates proper error handling
# when using the Claude Agent SDK.
#
use 5.020;
use strict;
use warnings;
use lib 'lib';
use Claude::Agent qw(query);
use Claude::Agent::Options;
use Claude::Agent::Error;
use Try::Tiny;
# Example 1: Handle CLI not found
say "Example 1: Handling CLI errors";
say "-" x 50;
try {
my $options = Claude::Agent::Options->new(
allowed_tools => ['Read'],
permission_mode => 'bypassPermissions',
);
my $iter = query(
prompt => 'Hello',
options => $options,
);
while (my $msg = $iter->next) {
if ($msg->isa('Claude::Agent::Message::Result')) {
if ($msg->is_error) {
say "Query failed: " . $msg->result;
}
else {
say "Success: " . substr($msg->result // '', 0, 100) . "...";
}
last;
}
}
}
catch {
if ($_->isa('Claude::Agent::Error::CLINotFound')) {
say "ERROR: Claude CLI not found!";
say "Please install it from: https://claude.ai/download";
}
elsif ($_->isa('Claude::Agent::Error::ProcessError')) {
say "ERROR: Process failed!";
say "Exit code: " . ($_->exit_code // 'unknown');
say "Stderr: " . ($_->stderr // 'none');
}
elsif ($_->isa('Claude::Agent::Error::TimeoutError')) {
say "ERROR: Operation timed out after " . $_->timeout_ms . "ms";
}
elsif ($_->isa('Claude::Agent::Error::JSONDecodeError')) {
say "ERROR: Failed to parse response!";
say "Line: " . ($_->line // 'unknown');
}
elsif ($_->isa('Claude::Agent::Error')) {
say "ERROR: " . $_->message;
}
else {
say "UNEXPECTED ERROR: $_";
}
};
# Example 2: Validate options
say "\nExample 2: Option validation";
say "-" x 50;
try {
# This should work fine
my $valid_options = Claude::Agent::Options->new(
( run in 1.363 second using v1.01-cache-2.11-cpan-39bf76dae61 )