--- 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
$ sudo apt-get install libjson-perl libio-socket-ssl-perl libwww-perl libipc-system-simple-perl
$ git clone https://github.com/curoverse/arvados.git
$ cd arvados/sdk/perl
$ perl Makefile.PL
$ sudo make install
h4. 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.