File Coverage

blib/lib/WWW/Google/CustomSearch/Params.pm
Criterion Covered Total %
statement 20 32 62.5
branch n/a
condition 6 9 66.6
subroutine 11 23 47.8
pod 0 18 0.0
total 37 82 45.1


line stmt bran cond sub pod time code
1             package WWW::Google::CustomSearch::Params;
2              
3             $WWW::Google::CustomSearch::Params::VERSION = '0.37';
4             $WWW::Google::CustomSearch::Params::AUTHORITY = 'cpan:MANWAR';
5              
6             =head1 NAME
7              
8             WWW::Google::CustomSearch::Params - Placeholders for parameters for WWW::Google::CustomSearch
9              
10             =head1 VERSION
11              
12             Version 0.37
13              
14             =head1 DESCRIPTION
15              
16             B
17              
18             =cut
19              
20 5     5   89 use 5.006;
  5         13  
21 5     5   21 use strict; use warnings;
  5     5   10  
  5         96  
  5         40  
  5         7  
  5         135  
22 5     5   21 use Data::Dumper;
  5         7  
  5         256  
23              
24 5     5   1785 use parent 'Exporter';
  5         1291  
  5         25  
25             our @EXPORT_OK = qw($FIELDS);
26              
27             my $LANGUAGE = {
28             'lang_ar' => 1, 'lang_bg' => 1, 'lang_ca' => 1, 'lang_zh-cn' => 1, 'lang_zh-tw' => 1,
29             'lang_hr' => 1, 'lang_cs' => 1, 'lang_da' => 1, 'lang_nl' => 1, 'lang_en' => 1,
30             'lang_et' => 1, 'lang_fi' => 1, 'lang_fr' => 1, 'lang_de' => 1, 'lang_el' => 1,
31             'lang_iw' => 1, 'lang_hu' => 1, 'lang_is' => 1, 'lang_id' => 1, 'lang_it' => 1,
32             'lang_ja' => 1, 'lang_ko' => 1, 'lang_lv' => 1, 'lang_lt' => 1, 'lang_no' => 1,
33             'lang_pl' => 1, 'lang_pt' => 1, 'lang_ro' => 1, 'lang_ru' => 1, 'lang_sr' => 1,
34             'lang_sk' => 1, 'lang_sl' => 1, 'lang_es' => 1, 'lang_sv' => 1, 'lang_tr' => 1 };
35              
36             my $COUNTRY_COLLECTION = {
37             'countryaf' => 1, 'countryal' => 1, 'countrydz' => 1, 'countryas' => 1, 'countryad' => 1,
38             'countryao' => 1, 'countryai' => 1, 'countryaq' => 1, 'countryag' => 1, 'countryar' => 1,
39             'countryam' => 1, 'countryaw' => 1, 'countryau' => 1, 'countryat' => 1, 'countryaz' => 1,
40             'countrybs' => 1, 'countrybh' => 1, 'countrybd' => 1, 'countrybb' => 1, 'countryby' => 1,
41             'countrybe' => 1, 'countrybz' => 1, 'countrybj' => 1, 'countrybm' => 1, 'countrybt' => 1,
42             'countrybo' => 1, 'countryba' => 1, 'countrybw' => 1, 'countrybv' => 1, 'countrybr' => 1,
43             'countryio' => 1, 'countrybn' => 1, 'countrybg' => 1, 'countrybf' => 1, 'countrybi' => 1,
44             'countrykh' => 1, 'countrycm' => 1, 'countryca' => 1, 'countrycv' => 1, 'countryky' => 1,
45             'countrycf' => 1, 'countrytd' => 1, 'countrycl' => 1, 'countrycn' => 1, 'countrycx' => 1,
46             'countrycc' => 1, 'countryco' => 1, 'countrykm' => 1, 'countrycg' => 1, 'countrycd' => 1,
47             'countryck' => 1, 'countrycr' => 1, 'countryci' => 1, 'countryhr' => 1, 'countrycu' => 1,
48             'countrycy' => 1, 'countrycz' => 1, 'countrydk' => 1, 'countrydj' => 1, 'countrydm' => 1,
49             'countrydo' => 1, 'countrytp' => 1, 'countryec' => 1, 'countryeg' => 1, 'countrysv' => 1,
50             'countrygq' => 1, 'countryer' => 1, 'countryee' => 1, 'countryet' => 1, 'countryeu' => 1,
51             'countryfk' => 1, 'countryfo' => 1, 'countryfj' => 1, 'countryfi' => 1, 'countryfr' => 1,
52             'countryfx' => 1, 'countrygf' => 1, 'countrypf' => 1, 'countrytf' => 1, 'countryga' => 1,
53             'countrygm' => 1, 'countryge' => 1, 'countryde' => 1, 'countrygh' => 1, 'countrygi' => 1,
54             'countrygr' => 1, 'countrygl' => 1, 'countrygd' => 1, 'countrygp' => 1, 'countrygu' => 1,
55             'countrygt' => 1, 'countrygn' => 1, 'countrygw' => 1, 'countrygy' => 1, 'countryht' => 1,
56             'countryhm' => 1, 'countryva' => 1, 'countryhn' => 1, 'countryhk' => 1, 'countryhu' => 1,
57             'countryis' => 1, 'countryin' => 1, 'countryid' => 1, 'countryir' => 1, 'countryiq' => 1,
58             'countryie' => 1, 'countryil' => 1, 'countryit' => 1, 'countryjm' => 1, 'countryjp' => 1,
59             'countryjo' => 1, 'countrykz' => 1, 'countryke' => 1, 'countryki' => 1, 'countrykp' => 1,
60             'countrykr' => 1, 'countrykw' => 1, 'countrykg' => 1, 'countryla' => 1, 'countrylv' => 1,
61             'countrylb' => 1, 'countryls' => 1, 'countrylr' => 1, 'countryly' => 1, 'countryli' => 1,
62             'countrylt' => 1, 'countrylu' => 1, 'countrymo' => 1, 'countrymk' => 1, 'countrymg' => 1,
63             'countrymw' => 1, 'countrymy' => 1, 'countrymv' => 1, 'countryml' => 1, 'countrymt' => 1,
64             'countrymh' => 1, 'countrymq' => 1, 'countrymr' => 1, 'countrymu' => 1, 'countryyt' => 1,
65             'countrymx' => 1, 'countryfm' => 1, 'countrymd' => 1, 'countrymc' => 1, 'countrymn' => 1,
66             'countryms' => 1, 'countryma' => 1, 'countrymz' => 1, 'countrymm' => 1, 'countryna' => 1,
67             'countrynr' => 1, 'countrynp' => 1, 'countrynl' => 1, 'countryan' => 1, 'countrync' => 1,
68             'countrynz' => 1, 'countryni' => 1, 'countryne' => 1, 'countryng' => 1, 'countrynu' => 1,
69             'countrynf' => 1, 'countrymp' => 1, 'countryno' => 1, 'countryom' => 1, 'countrypk' => 1,
70             'countrypw' => 1, 'countryps' => 1, 'countrypa' => 1, 'countrypg' => 1, 'countrypy' => 1,
71             'countrype' => 1, 'countryph' => 1, 'countrypn' => 1, 'countrypl' => 1, 'countrypt' => 1,
72             'countrypr' => 1, 'countryqa' => 1, 'countryre' => 1, 'countryro' => 1, 'countryru' => 1,
73             'countryrw' => 1, 'countrysh' => 1, 'countrykn' => 1, 'countrylc' => 1, 'countrypm' => 1,
74             'countryvc' => 1, 'countryws' => 1, 'countrysm' => 1, 'countryst' => 1, 'countrysa' => 1,
75             'countrysn' => 1, 'countrycs' => 1, 'countrysc' => 1, 'countrysl' => 1, 'countrysg' => 1,
76             'countrysk' => 1, 'countrysi' => 1, 'countrysb' => 1, 'countryso' => 1, 'countryza' => 1,
77             'countrygs' => 1, 'countryes' => 1, 'countrylk' => 1, 'countrysd' => 1, 'countrysr' => 1,
78             'countrysj' => 1, 'countrysz' => 1, 'countryse' => 1, 'countrych' => 1, 'countrysy' => 1,
79             'countrytw' => 1, 'countrytj' => 1, 'countrytz' => 1, 'countryth' => 1, 'countrytg' => 1,
80             'countrytk' => 1, 'countryto' => 1, 'countrytt' => 1, 'countrytn' => 1, 'countrytr' => 1,
81             'countrytm' => 1, 'countrytc' => 1, 'countrytv' => 1, 'countryug' => 1, 'countryua' => 1,
82             'countryae' => 1, 'countryuk' => 1, 'countryus' => 1, 'countryum' => 1, 'countryuy' => 1,
83             'countryuz' => 1, 'countryvu' => 1, 'countryve' => 1, 'countryvn' => 1, 'countryvg' => 1,
84             'countryvi' => 1, 'countrywf' => 1, 'countryeh' => 1, 'countryye' => 1, 'countryyu' => 1,
85             'countryzm' => 1, 'countryzw' => 1 };
86              
87             my $COUNTRY_CODE = {
88             'af' => 1, 'al' => 1, 'dz' => 1, 'as' => 1, 'ad' => 1, 'ao' => 1, 'ai' => 1, 'aq' => 1,
89             'ag' => 1, 'ar' => 1, 'am' => 1, 'aw' => 1, 'au' => 1, 'at' => 1, 'az' => 1, 'bs' => 1,
90             'bh' => 1, 'bd' => 1, 'bb' => 1, 'by' => 1, 'be' => 1, 'bz' => 1, 'bj' => 1, 'bm' => 1,
91             'bt' => 1, 'bo' => 1, 'ba' => 1, 'bw' => 1, 'bv' => 1, 'br' => 1, 'io' => 1, 'bn' => 1,
92             'bg' => 1, 'bf' => 1, 'bi' => 1, 'kh' => 1, 'cm' => 1, 'ca' => 1, 'cv' => 1, 'ky' => 1,
93             'cf' => 1, 'td' => 1, 'cl' => 1, 'cn' => 1, 'cx' => 1, 'cc' => 1, 'co' => 1, 'km' => 1,
94             'cg' => 1, 'cd' => 1, 'ck' => 1, 'cr' => 1, 'ci' => 1, 'hr' => 1, 'cu' => 1, 'cy' => 1,
95             'cz' => 1, 'dk' => 1, 'dj' => 1, 'dm' => 1, 'do' => 1, 'ec' => 1, 'eg' => 1, 'sv' => 1,
96             'gq' => 1, 'er' => 1, 'ee' => 1, 'et' => 1, 'fk' => 1, 'fo' => 1, 'fj' => 1, 'fi' => 1,
97             'fr' => 1, 'gf' => 1, 'pf' => 1, 'tf' => 1, 'ga' => 1, 'gm' => 1, 'ge' => 1, 'de' => 1,
98             'gh' => 1, 'gi' => 1, 'gr' => 1, 'gl' => 1, 'gd' => 1, 'gp' => 1, 'gu' => 1, 'gt' => 1,
99             'gn' => 1, 'gw' => 1, 'gy' => 1, 'ht' => 1, 'hm' => 1, 'va' => 1, 'hn' => 1, 'hk' => 1,
100             'hu' => 1, 'is' => 1, 'in' => 1, 'id' => 1, 'ir' => 1, 'iq' => 1, 'ie' => 1, 'il' => 1,
101             'it' => 1, 'jm' => 1, 'jp' => 1, 'jo' => 1, 'kz' => 1, 'ke' => 1, 'ki' => 1, 'kp' => 1,
102             'kr' => 1, 'kw' => 1, 'kg' => 1, 'la' => 1, 'lv' => 1, 'lb' => 1, 'ls' => 1, 'lr' => 1,
103             'ly' => 1, 'li' => 1, 'lt' => 1, 'lu' => 1, 'mo' => 1, 'mk' => 1, 'mg' => 1, 'mw' => 1,
104             'my' => 1, 'mv' => 1, 'ml' => 1, 'mt' => 1, 'mh' => 1, 'mq' => 1, 'mr' => 1, 'mu' => 1,
105             'yt' => 1, 'mx' => 1, 'fm' => 1, 'md' => 1, 'mc' => 1, 'mn' => 1, 'ms' => 1, 'ma' => 1,
106             'mz' => 1, 'mm' => 1, 'na' => 1, 'nr' => 1, 'np' => 1, 'nl' => 1, 'an' => 1, 'nc' => 1,
107             'nz' => 1, 'ni' => 1, 'ne' => 1, 'ng' => 1, 'nu' => 1, 'nf' => 1, 'mp' => 1, 'no' => 1,
108             'om' => 1, 'pk' => 1, 'pw' => 1, 'ps' => 1, 'pa' => 1, 'pg' => 1, 'py' => 1, 'pe' => 1,
109             'ph' => 1, 'pn' => 1, 'pl' => 1, 'pt' => 1, 'pr' => 1, 'qa' => 1, 're' => 1, 'ro' => 1,
110             'ru' => 1, 'rw' => 1, 'sh' => 1, 'kn' => 1, 'lc' => 1, 'pm' => 1, 'vc' => 1, 'ws' => 1,
111             'sm' => 1, 'st' => 1, 'sa' => 1, 'sn' => 1, 'cs' => 1, 'sc' => 1, 'sl' => 1, 'sg' => 1,
112             'sk' => 1, 'si' => 1, 'sb' => 1, 'so' => 1, 'za' => 1, 'gs' => 1, 'es' => 1, 'lk' => 1,
113             'sd' => 1, 'sr' => 1, 'sj' => 1, 'sz' => 1, 'se' => 1, 'ch' => 1, 'sy' => 1, 'tw' => 1,
114             'tj' => 1, 'tz' => 1, 'th' => 1, 'tl' => 1, 'tg' => 1, 'tk' => 1, 'to' => 1, 'tt' => 1,
115             'tn' => 1, 'tr' => 1, 'tm' => 1, 'tc' => 1, 'tv' => 1, 'ug' => 1, 'ua' => 1, 'ae' => 1,
116             'uk' => 1, 'us' => 1, 'um' => 1, 'uy' => 1, 'uz' => 1, 'vu' => 1, 've' => 1, 'vn' => 1,
117             'vg' => 1, 'vi' => 1, 'wf' => 1, 'eh' => 1, 'ye' => 1, 'zm' => 1, 'zw' => 1 };
118              
119             my $INTERFACE_LANGUAGE = {
120             'af' => 1, 'sq' => 1, 'sm' => 1, 'ar' => 1, 'az' => 1, 'eu' => 1, 'be' => 1, 'bn' => 1, 'bh' => 1,
121             'bs' => 1, 'bg' => 1, 'ca' => 1, 'zh-cn' => 1, 'zh-tw' => 1, 'hr' => 1, 'cs' => 1, 'da' => 1, 'nl' => 1,
122             'en' => 1, 'eo' => 1, 'et' => 1, 'fo' => 1, 'fi' => 1, 'fr' => 1, 'fy' => 1, 'gl' => 1, 'ka' => 1,
123             'de' => 1, 'el' => 1, 'gu' => 1, 'iw' => 1, 'hi' => 1, 'hu' => 1, 'is' => 1, 'id' => 1, 'ia' => 1,
124             'ga' => 1, 'it' => 1, 'ja' => 1, 'jw' => 1, 'kn' => 1, 'ko' => 1, 'la' => 1, 'lv' => 1, 'lt' => 1,
125             'mk' => 1, 'ms' => 1, 'ml' => 1, 'mt' => 1, 'mr' => 1, 'ne' => 1, 'no' => 1, 'nn' => 1, 'oc' => 1,
126             'fa' => 1, 'pl' => 1, 'pt-br' => 1, 'pt-pt' => 1, 'pa' => 1, 'ro' => 1, 'ru' => 1, 'gd' => 1, 'sr' => 1,
127             'si' => 1, 'sk' => 1, 'sl' => 1, 'es' => 1, 'su' => 1, 'sw' => 1, 'sv' => 1, 'tl' => 1, 'ta' => 1,
128             'te' => 1, 'th' => 1, 'ti' => 1, 'tr' => 1, 'uk' => 1, 'ur' => 1, 'uz' => 1, 'vi' => 1, 'cy' => 1,
129             'xh' => 1, 'zu' => 1 };
130              
131             my $FILE_TYPE = {
132             '.swf' => 1, '.pdf' => 1, '.ps' => 1, '.dwf' => 1, '.kml' => 1, '.kmz' => 1, '.gpx' => 1,
133             '.hwp' => 1, '.htm' => 1, '.html' => 1, '.xls' => 1, '.xlsx' => 1, '.ppt' => 1, '.pptx' => 1,
134             '.doc' => 1, '.docx' => 1, '.odp' => 1, '.ods' => 1, '.odt' => 1, '.rtf' => 1, '.wri' => 1,
135             '.svg' => 1, '.tex' => 1, '.txt' => 1, '.text' => 1, '.bas' => 1, '.c' => 1, '.cc' => 1,
136             '.cpp' => 1, '.cxx' => 1, '.h' => 1, '.hpp' => 1, '.cs' => 1, '.java' => 1, '.pl' => 1,
137             '.py' => 1, '.wml' => 1, '.wap' => 1, '.xml' => 1 };
138              
139             my $DOMINANT_COLOR = {
140             'black' => 1, 'blue' => 1, 'brown' => 1, 'gray' => 1, 'green' => 1, 'pink' => 1,
141             'purple' => 1, 'teal' => 1, 'white' => 1, 'yellow' => 1 };
142              
143             my $COLOR_TYPE = { 'color' => 1, 'gray' => 1, 'mono' => 1 };
144              
145             my $IMAGE_SIZE = { 'huge' => 1, 'icon' => 1, 'large' => 1, 'medium' => 1, 'small' => 1, 'xlarge' => 1, 'xxlarge'=> 1 };
146              
147             my $IMAGE_TYPE = { 'clipart' => 1, 'face' => 1, 'lineart' => 1, 'news' => 1, 'photo' => 1 };
148              
149             my $RIGHTS = { 'cc_publicdomain' => 1, 'cc_attribute' => 1, 'cc_sharealike' => 1, 'cc_noncommercial' => 1, 'cc_nonderived' => 1 };
150              
151             my $SEARCH_TYPE = { 'image' => 1 };
152              
153             my $SEARCH_FILTER = { 'e' => 1, 'i' => 1 };
154              
155             my $SAFETY_LEVEL = { 'off' => 1, 'medium' => 1, 'high' => 1 };
156              
157              
158 2   33 2 0 30 sub check_int { return defined ($_[0]) && $_[0] =~ /^\d+$/ };
159 0     0 0 0 sub check_str { return !check_int($_[0]) };
160 0     0 0 0 sub check_language { return exists($LANGUAGE->{lc($_[0])}) };
161 0     0 0 0 sub check_country_collection { return exists($COUNTRY_COLLECTION->{lc($_[0])}) };
162 0     0 0 0 sub check_file_type { return exists($FILE_TYPE->{lc($_[0])}) };
163 0     0 0 0 sub check_country_code { return exists($COUNTRY_CODE->{lc($_[0])}) };
164 0     0 0 0 sub check_interface_language { return exists($INTERFACE_LANGUAGE->{lc($_[0])}) };
165 0     0 0 0 sub check_color_type { return exists($COLOR_TYPE->{lc($_[0])}) };
166 0     0 0 0 sub check_dominant_color { return exists($DOMINANT_COLOR->{lc($_[0])}) };
167 0     0 0 0 sub check_image_size { return exists($IMAGE_SIZE->{lc($_[0])}) };
168 0     0 0 0 sub check_image_type { return exists($IMAGE_TYPE->{lc($_[0])}) };
169 1     1 0 14 sub check_rights { return exists($RIGHTS->{lc($_[0])}) };
170 0     0 0 0 sub check_search_type { return exists($SEARCH_TYPE->{lc($_[0])}) };
171 0     0 0 0 sub check_search_filter { return exists($SEARCH_FILTER->{lc($_[0])}) };
172 5     5 0 27 sub check_safety_level { return exists($SAFETY_LEVEL->{lc($_[0])}) };
173 2     2 0 19 sub check_date_restrict { return ($_[0] =~ /^[d|w|m|y]\d+$/i) };
174 4   66 4 0 37 sub check_start_index { return ($_[0] =~ /^\d+$/) && ($_[0] >= 1) };
175 7   100 7 0 80 sub check_result_count { return ($_[0] =~ /^\d{1,2}$/) && ($_[0] >= 1) && ($_[0] <= 10) };
176              
177             our $FIELDS = {
178             'filter' => { required => 0, type => 'd' },
179             'prettyprint' => { required => 0, type => 's' },
180             'c2coff' => { required => 0, type => 'd' },
181             'callback' => { required => 0, check => sub { check_str(@_) }, type => 's' },
182             'fields' => { required => 0, check => sub { check_str(@_) }, type => 's' },
183             'quotaUser' => { required => 0, check => sub { check_str(@_) }, type => 's' },
184             'userIp' => { required => 0, check => sub { check_str(@_) }, type => 's' },
185             'cr' => { required => 0, check => sub { check_country_collection(@_) }, type => 's' },
186             #'cref' => { required => 0, check => sub { check_str(@_) }, type => 's' },
187             #'cx' => { required => 0, check => sub { check_str(@_) }, type => 's' },
188             'dateRestrict' => { required => 0, check => sub { check_date_restrict(@_) }, type => 's' },
189             'exactTerms' => { required => 0, check => sub { check_str(@_) }, type => 's' },
190             'excludeTerms' => { required => 0, check => sub { check_str(@_) }, type => 's' },
191             'fileType' => { required => 0, check => sub { check_file_type(@_) }, type => 's' },
192             'gl' => { required => 0, check => sub { check_country_code(@_) }, type => 's' },
193             'googlehost' => { required => 0, check => sub { check_str(@_) }, type => 's' },
194             'highRange' => { required => 0, check => sub { check_int(@_) }, type => 'd' },
195             'hl' => { required => 0, check => sub { check_interface_language(@_) }, type => 's' },
196             'hq' => { required => 0, check => sub { check_str(@_) }, type => 's' },
197             'imgColorType' => { required => 0, check => sub { check_color_type(@_) }, type => 's' },
198             'imgDominantColor' => { required => 0, check => sub { check_dominant_color(@_) }, type => 's' },
199             'imgSize' => { required => 0, check => sub { check_image_size(@_) }, type => 's' },
200             'imgType' => { required => 0, check => sub { check_image_type(@_) }, type => 's' },
201             'linkSite' => { required => 0, check => sub { check_str(@_) }, type => 's' },
202             'lowRange' => { required => 0, check => sub { check_int(@_) }, type => 'd' },
203             'lr' => { required => 0, check => sub { check_language(@_) }, type => 's' },
204             'num' => { required => 0, check => sub { check_result_count(@_) }, type => 'd' },
205             'orTerms' => { required => 0, check => sub { check_str(@_) }, type => 's' },
206             'relatedSite' => { required => 0, check => sub { check_str(@_) }, type => 's' },
207             'rights' => { required => 0, check => sub { check_rights(@_) }, type => 's' },
208             'safe' => { required => 0, check => sub { check_safety_level(@_) }, type => 's' },
209             'searchType' => { required => 0, check => sub { check_search_type(@_) }, type => 's' },
210             'siteSearch' => { required => 0, check => sub { check_str(@_) }, type => 's' },
211             'siteSearchFilter' => { required => 0, check => sub { check_search_filter(@_) }, type => 's' },
212             'sort' => { required => 0, check => sub { check_str(@_) }, type => 's' },
213             'start' => { required => 0, check => sub { check_start_index(@_) }, type => 'd' },
214             };
215              
216             =head1 AUTHOR
217              
218             Mohammad S Anwar, C<< >>
219              
220             =head1 REPOSITORY
221              
222             L
223              
224             =head1 CONTRIBUTORS
225              
226             David Kitcher-Jones (m4ddav3)
227              
228             =head1 BUGS
229              
230             Please report any bugs or feature requests to C
231             rt.cpan.org>, or through the web interface at L.
232             I will be notified, and then you'll automatically be notified of progress on your
233             bug as I make changes.
234              
235             =head1 SUPPORT
236              
237             You can find documentation for this module with the perldoc command.
238              
239             perldoc WWW::Google::CustomSearch::Params
240              
241             You can also look for information at:
242              
243             =over 4
244              
245             =item * RT: CPAN's request tracker (report bugs here)
246              
247             L
248              
249             =item * AnnoCPAN: Annotated CPAN documentation
250              
251             L
252              
253             =item * CPAN Ratings
254              
255             L
256              
257             =item * Search CPAN
258              
259             L
260              
261             =back
262              
263             =head1 LICENSE AND COPYRIGHT
264              
265             Copyright (C) 2011 - 2015 Mohammad S Anwar.
266              
267             This program is free software; you can redistribute it and / or modify it under
268             the terms of the the Artistic License (2.0). You may obtain a copy of the full
269             license at:
270              
271             L
272              
273             Any use, modification, and distribution of the Standard or Modified Versions is
274             governed by this Artistic License.By using, modifying or distributing the Package,
275             you accept this license. Do not use, modify, or distribute the Package, if you do
276             not accept this license.
277              
278             If your Modified Version has been derived from a Modified Version made by someone
279             other than you,you are nevertheless required to ensure that your Modified Version
280             complies with the requirements of this license.
281              
282             This license does not grant you the right to use any trademark, service mark,
283             tradename, or logo of the Copyright Holder.
284              
285             This license includes the non-exclusive, worldwide, free-of-charge patent license
286             to make, have made, use, offer to sell, sell, import and otherwise transfer the
287             Package with respect to any patent claims licensable by the Copyright Holder that
288             are necessarily infringed by the Package. If you institute patent litigation
289             (including a cross-claim or counterclaim) against any party alleging that the
290             Package constitutes direct or contributory patent infringement,then this Artistic
291             License to you shall terminate on the date that such litigation is filed.
292              
293             Disclaimer of Warranty: THE PACKAGE IS PROVIDED BY THE COPYRIGHT HOLDER AND
294             CONTRIBUTORS "AS IS' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES. THE IMPLIED
295             WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR
296             NON-INFRINGEMENT ARE DISCLAIMED TO THE EXTENT PERMITTED BY YOUR LOCAL LAW. UNLESS
297             REQUIRED BY LAW, NO COPYRIGHT HOLDER OR CONTRIBUTOR WILL BE LIABLE FOR ANY DIRECT,
298             INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING IN ANY WAY OUT OF THE USE
299             OF THE PACKAGE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
300              
301             =cut
302              
303             1; # End of WWW::Google::CustomSearch::Params