Thrift Perl Software Library

License
=======

Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

  http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.

Using Thrift with Perl
=====================

Thrift requires Perl >= 5.6.0

Exceptions are thrown with die so be sure to wrap eval{} statments
around any code that contains exceptions.

The 64bit Integers work only upto 2^42 on my machine :-?
Math::BigInt is probably needed.

Please see tutoral and test dirs for examples...

Dependencies
============

Bit::Vector     - comes with modern perl installations.
Class::Accessor

