Simon Wistow


Cal::DAV - a CalDAV client


    my $cal = Cal::DAV->new( user => $user, pass => $pass, url => $url);
    # the ics data will be fetched automatically if it's there

    # ... or you can parse some ics 
    $cal->parse(filename => $data);

    # cal now has all the methods of Data::ICal
    # you can now monkey around with the object

    # saves the updated calendar

    # deletes the calendar

    # lock the file on the server

    # unlock the file on the server

    # steal the lock

    # also

    # and

    # resyncs it with the server

    # Get the underlying HTTP::DAV object
    my $dav = $cal->dav;


Cal::DAV is actually a very thin wrapper round HTTP::DAV and Data::ICal but it may gain more functionality later and, in the mean time, serves as something that


In order to test you need to define three environment variables: CAL_DAV_USER, CAL_DAV_PASS and CAL_DAV_URL_BASE which points to a DAV collection that the user supplied has write permissions for.

It should be noted that, at the moment, I'm having problems finding a CalDAV server that allows me to create files and so I can't run all the tests.


new <arg[s]>

Must have at least user, pass and url args where url is the url of a remote, DAV accessible .ics file.

Can optionally take an auto_commit option. See auto_commit() method below.

parse <arg[s]>

Make a new calendar object using same arguments as Data::ICal's new() or parse() methods.

Does not auto save for you.

Returns 1 on success and 0 on failure.

save [url]

Save the calendar back to the server (or optionally to another path).

Returns 1 on success and 0 on failure.

delete [url]

Delete the file on the server or optionally another url.

Returns 1 on success and 0 on failure.

get [url]

Refetch the file from the sever to sync it -

Alternatively fetch an alternative url.

These will lose any local changes.


Same options as HTTP::DAV's unlock.


Same options as HTTP::DAV's unlock.


Same options as HTTP::DAV's steal_lock.


Same options as HTTP::DAV::Response's lockdiscovery.


Same options as HTTP::DAV::Response's forcefully_unlock_all.

dav [HTTP::DAV]

Get the underlying HTTP::DAV object or, alterntively, replace it with a a new one.


Get the underlying cal object

auto_commit [boolean]

Whether to auto save on desctruction or not.

Defaults to 0.


Same as HTTP::DAV's message function.


Same as HTTP::DAV's errors function.


Simon Wistow <>


Copyright 2007, Simon Wistow

Released under the same terms as Perl itself.