--- layout: default navsection: sdk navmenu: Perl title: "Perl SDK" ... The Perl SDK provides a generic set of wrappers so you can make API calls easily. It should be treated as alpha/experimental. Currently, limitations include: * Verbose syntax. * No native Keep client. * No CPAN package. h3. Installation h4. Option 1: Install from distribution packages First, "add the appropriate package repository for your distribution":{{ site.baseurl }}/install/install-manual-prerequisites.html#repos. On Debian-based systems:
~$ sudo apt-get install libjson-perl libio-socket-ssl-perl libwww-perl libipc-system-simple-perl libarvados-perl
On Red Hat-based systems:
~$ sudo yum install perl-ExtUtils-MakeMaker perl-JSON perl-IO-Socket-SSL perl-Crypt-SSLeay perl-WWW-Curl libarvados-perl
h4. Option 2: Install from source First, install dependencies from your distribution. Refer to the package lists above, but don't install @libarvados-perl@. Then run the following:
~$ git clone https://github.com/curoverse/arvados.git
~$ cd arvados/sdk/perl
~$ perl Makefile.PL
~$ sudo make install
h3. Test installation If the SDK is installed, @perl -MArvados -e ''@ should produce no errors. If your @ARVADOS_API_HOST@ and @ARVADOS_API_TOKEN@ environment variables are set up correctly (see "api-tokens":{{site.baseurl}}/user/reference/api-tokens.html for details), the following test script should work:
~$ perl <<'EOF'
use Arvados;
my $arv = Arvados->new('apiVersion' => 'v1');
my $me = $arv->{'users'}->{'current'}->execute;
print ("arvados.v1.users.current.full_name = '", $me->{'full_name'}, "'\n");
EOF
arvados.v1.users.current.full_name = 'Your Name'
h3. Examples Set up an API client user agent:
my $arv = Arvados->new('apiVersion' => 'v1');
Get the User object for the current user:
my $current_user = $arv->{'users'}->{'current'}->execute;
Get the UUID of an object that was retrieved using the SDK:
my $current_user_uuid = $current_user->{'uuid'}
Retrieve an object by ID:
my $some_user = $arv->{'users'}->{'get'}->execute('uuid' => $current_user_uuid);
Create an object:
my $test_link = $arv->{'links'}->{'create'}->execute('link' => { 'link_class' => 'test', 'name' => 'test' });
Update an object:
my $test_link = $arv->{'links'}->{'update'}->execute(
        'uuid' => $test_link->{'uuid'},
        'link' => { 'properties' => { 'foo' => 'bar' } });
Get a list of objects:
my $repos = $arv->{'repositories'}->{'list'}->execute;
print ("UUID of first repo returned is ", $repos->{'items'}->[0], "\n");
The SDK retrieves the list of API methods from the server at run time. Therefore, the set of available methods is determined by the server version rather than the SDK version.