File Coverage

lib/Net/API/Stripe/Connect/ExternalAccount/Card.pm
Criterion Covered Total %
statement 19 84 22.6
branch n/a
condition n/a
subroutine 7 72 9.7
pod 59 65 90.7
total 85 221 38.4


line stmt bran cond sub pod time code
1             ##----------------------------------------------------------------------------
2             ## Stripe API - ~/lib/Net/API/Stripe/Connect/ExternalAccount/Card.pm
3             ## Version v0.203.0
4             ## Copyright(c) 2020 DEGUEST Pte. Ltd.
5             ## Author: Jacques Deguest <jack@deguest.jp>
6             ## Created 2019/11/02
7             ## Modified 2022/10/29
8             ## All rights reserved
9             ##
10             ## This program is free software; you can redistribute it and/or modify it
11             ## under the same terms as Perl itself.
12             ##----------------------------------------------------------------------------
13             ## https://stripe.com/docs/api/external_account_cards/object
14             BEGIN
15             {
16             use strict;
17 3     3   24205276 use warnings;
  3         16  
  3         94  
18 3     3   17 use parent qw( Net::API::Stripe::Generic );
  3         5  
  3         89  
19 3     3   16 use vars qw( $VERSION );
  3         6  
  3         18  
20 3     3   211 our( $VERSION ) = 'v0.203.0';
  3         7  
  3         198  
21 3     3   57 };
22              
23             use strict;
24 3     3   17 use warnings;
  3         10  
  3         59  
25 3     3   15  
  3         7  
  3         3874  
26              
27 0     0 1    
28              
29 0     0 1    
30              
31 0     0 1    
32              
33 0     0 1    
34              
35 0     0 1    
36              
37 0     0 1    
38              
39 0     0 1    
40              
41 0     0 1    
42             # Card brand name, e.g. American Express, Diners Club, Discover, JCB, MasterCard, UnionPay, Visa, or Unknown
43 0     0 1    
44              
45 0     0 1    
46              
47 0     0 1    
48              
49 0     0 1    
50              
51 0     0 1    
52              
53 0     0 1    
54              
55 0     0 0    
56              
57 0     0 0    
58              
59              
60              
61 0     0 1    
62              
63 0     0 1    
64              
65 0     0 0    
66              
67 0     0 1    
68              
69 0     0 1    
70              
71 0     0 1    
72             # Cardholder name
73 0     0 1    
74              
75 0     0 1   # Preview features says Stripe API
76              
77 0     0 1    
78             {
79 0     0 1   return( shift->_set_get_class( 'networks',
80             {
81 0     0 1   available => { type => 'array_as_object' },
82             preferred => { type => 'scalar_as_object' },
83 0     0 1   }, @_ ) );
84             }
85 0     0 1    
86              
87 0     0 1    
88              
89 0     0 1   {
90             account_type => { type => 'scalar' },
91 0     0 1   application_cryptogram => { type => 'scalar' },
92             application_preferred_name => { type => 'scalar' },
93 0     0 1   authorization_code => { type => 'scalar' },
94             authorization_response_code => { type => 'scalar' },
95 0     0 1   cardholder_verification_method => { type => 'scalar' },
96             dedicated_file_name => { type => 'scalar' },
97 0     0 1   terminal_verification_results => { type => 'scalar' },
98             transaction_status_information => { type => 'scalar' },
99 0     0 1   }, @_ ) ); }
100              
101 0     0 1    
102              
103 0     0 1    
104              
105 0     0 1    
106              
107 0     0 1    
108              
109 0     0 1    
110             {
111 0     0 1   authenticated => { type => 'boolean' },
112             authentication_flow => { type => 'scalar' },
113 0     0 1   result => { type => 'scalar' },
114             result_reason => { type => 'scalar' },
115 0     0 1   succeeded => { type => 'boolean' },
116             version => { type => 'scalar' },
117             }, @_ ) ); }
118              
119 0     0 1   # sub three_d_secure_usage { return( shift->_set_get_hash_as_object( 'three_d_secure_usage', 'Net::API::Stripe::Payment::3DUsage', @_ ) ); }
120              
121             { supported => { type => "boolean" } }, @_ ) ); }
122              
123 0     0 1    
124             ## sub wallet { return( shift->_set_get_hash_as_object( 'wallet', 'Net::API::Stripe::Payment::Wallet', @_ ) ); }
125              
126              
127 0     0 1   {
128             amex_express_checkout => { type => "hash" },
129             apple_pay => { type => "hash" },
130             dynamic_last4 => { type => "scalar" },
131             google_pay => { type => "hash" },
132             masterpass => {
133             definition => {
134 0     0 1   billing_address => { package => "Net::API::Stripe::Address", type => "object" },
135             email => { type => "scalar" },
136 0     0 1   name => { type => "scalar" },
137             shipping_address => { package => "Net::API::Stripe::Address", type => "object" },
138 0     0 1   },
139             type => "class",
140 0     0 1   },
141             samsung_pay => { type => "hash" },
142             type => { type => "scalar" },
143             visa_checkout => {
144             definition => {
145             billing_address => { package => "Net::API::Stripe::Address", type => "object" },
146             email => { type => "scalar" },
147             name => { type => "scalar" },
148             shipping_address => { package => "Net::API::Stripe::Address", type => "object" },
149             },
150             type => "class",
151             },
152             }, @_ ) ); }
153 0     0 1    
154             1;
155 0     0 1    
156              
157 0     0 1   =encoding utf8
158              
159 0     0 1   =head1 NAME
160              
161 0     0 1   Net::API::Stripe::Connect::ExternalAccount::Card - A Stripe Card Account Object
162              
163 0     0 0   =head1 SYNOPSIS
164              
165 0     0 0   my $card = $stripe->card({
166             account => 'acct_fake123456789',
167 0     0 0   # Or you can also simply pass a Net::API::Stripe::Address object
168             # address => $address_object
169 0     0 1   address_line1 => '1-2-3 Kudan-Minami, Chiyoda-ku',
170             address_line2 => 'Big bldg. 12F',
171 0     0 1   address_city => 'Tokyo',
172             address_zip => '123-4567',
173             address_country => 'jp',
174             brand => 'visa',
175             country => 'jp',
176             currency => 'jpy',
177             customer => $customer_object,
178             cvc => 123,
179             # Boolean
180             default_for_currency => 1,
181             exp_month => 12,
182             exp_year => 2030,
183 0     0 1   funding => 'debit',
184             metadata => { transaction_id => 123, customer_id => 456 },
185             name => 'John Doe',
186 0     0 1   });
187              
188             See documentation in L<Net::API::Stripe> for example to make api calls to Stripe to create those objects. For example:
189              
190 0     0 1   my $stripe = Net::API::Stripe->new( conf_file => 'settings.json' ) | die( Net::API::Stripe->error );
191             my $stripe_card = $stripe->cards( create =>
192 0     0 1   {
193             account => 'acct_fake123456789',
194             external_account =>
195             {
196             object => 'card',
197             exp_month => 12,
198             exp_year => 2030,
199             number => '012345678',
200             },
201             default_for_currency => $stripe->true,
202             metadata => { transaction_id => 123, customer_id => 456 },
203             }) || die( $stripe->error );
204              
205             =head1 VERSION
206              
207             v0.203.0
208              
209             =head1 DESCRIPTION
210              
211             These External Accounts are transfer destinations on Account objects for Custom accounts (L<https://stripe.com/docs/connect/custom-accounts>). They can be bank accounts or debit cards.
212              
213             Bank accounts (L<https://stripe.com/docs/api#customer_bank_account_object>) and debit cards (L<https://stripe.com/docs/api#card_object>) can also be used as payment sources on regular charges, and are documented in the links above.
214              
215             =head1 CONSTRUCTOR
216              
217             =head2 new( %ARG )
218              
219             Creates a new L<Net::API::Stripe::Connect::ExternalAccount::Card> object.
220             It may also take an hash like arguments, that also are method of the same name.
221              
222             =head1 METHODS
223              
224             =head2 id string
225              
226             Unique identifier for the object.
227              
228             =head2 object string, value is "card"
229              
230             String representing the object’s type. Objects of the same type share the same value.
231              
232             =head2 account custom only string (expandable)
233              
234             The account this card belongs to. This attribute will not be in the card object if the card belongs to a customer or recipient instead.
235              
236             When expanded, this is a L<Net::API::Stripe::Connect::Account> object.
237              
238             =head2 address L<Net::API::Stripe::Address> object or hash
239              
240             This is a helper method. Provided with either a L<Net::API::Stripe::Address> object or a hash with same properties, this will assign all the address_* properties by calling its method.
241              
242             =head2 address_city string
243              
244             City/District/Suburb/Town/Village.
245              
246             =head2 address_country string
247              
248             Billing address country, if provided when creating card.
249              
250             =head2 address_line1 string
251              
252             Address line 1 (Street address/PO Box/Company name).
253              
254             =head2 address_line1_check string
255              
256             If address_line1 was provided, results of the check: pass, fail, unavailable, or unchecked.
257              
258             =head2 address_line2 string
259              
260             Address line 2 (Apartment/Suite/Unit/Building).
261              
262             =head2 address_state string
263              
264             State/County/Province/Region.
265              
266             =head2 address_zip string
267              
268             ZIP or postal code.
269              
270             =head2 address_zip_check string
271              
272             If address_zip was provided, results of the check: pass, fail, unavailable, or unchecked.
273              
274             =head2 amount_authorized integer
275              
276             The authorized amount
277              
278             =head2 available_payout_methods array
279              
280             A set of available payout methods for this card. Will be either ["standard"] or ["standard", "instant"]. Only values from this set should be passed as the method when creating a transfer.
281              
282             =head2 brand string
283              
284             Card brand. Can be American Express, Diners Club, Discover, JCB, MasterCard, UnionPay, Visa, or Unknown.
285              
286             =head2 capture_before timestamp
287              
288             When using manual capture, a future timestamp after which the charge will be automatically refunded if uncaptured.
289              
290             =head2 cardholder_name string
291              
292             The cardholder name as read from the card, in L<ISO 7813|https://en.wikipedia.org/wiki/ISO/IEC_7813> format. May include alphanumeric characters, special characters and first/last name separator (C</>).
293              
294             =head2 checks
295              
296             =over 4
297              
298             =item I<address_line1_check> string
299              
300             If a address line1 was provided, results of the check, one of ‘pass’, ‘failed’, ‘unavailable’ or ‘unchecked’.
301              
302             =item I<address_postal_code_check> string
303              
304             If a address postal code was provided, results of the check, one of ‘pass’, ‘failed’, ‘unavailable’ or ‘unchecked’.
305              
306             =item I<cvc_check> string
307              
308             If a CVC was provided, results of the check, one of ‘pass’, ‘failed’, ‘unavailable’ or ‘unchecked’.
309              
310             =back
311              
312             =head2 country string
313              
314             Two-letter ISO code representing the country of the card. You could use this attribute to get a sense of the international breakdown of cards you’ve collected.
315              
316             =head2 currency custom only currency
317              
318             Three-letter ISO code for currency. Only applicable on accounts (not customers or recipients). The card can be used as a transfer destination for funds in this currency.
319              
320             =head2 customer string (expandable)
321              
322             The customer that this card belongs to. This attribute will not be in the card object if the card belongs to an account or recipient instead.
323              
324             When expanded, this is a L<Net::API::Stripe::Customer> object.
325              
326             =head2 cvc string
327              
328             Card security code. Highly recommended to always include this value, but it's required only for accounts based in European countries.
329              
330             This is used when creating a card object on Stripe API. See here: L<https://stripe.com/docs/api/cards/create>
331              
332             =head2 cvc_check string
333              
334             If a CVC was provided, results of the check: pass, fail, unavailable, or unchecked.
335              
336             =head2 default_for_currency custom only boolean
337              
338             Whether this card is the default external account for its currency.
339              
340             =head2 description string
341              
342             A high-level description of the type of cards issued in this range
343              
344             =head2 dynamic_last4 string
345              
346             (For tokenized numbers only.) The last four digits of the device account number.
347              
348             =head2 emv_auth_data string
349              
350             Authorization response cryptogram.
351              
352             =head2 exp_month integer
353              
354             Two-digit number representing the card’s expiration month.
355              
356             =head2 exp_year integer
357              
358             Four-digit number representing the card’s expiration year.
359              
360             =head2 fingerprint string
361              
362             Uniquely identifies this particular card number. You can use this attribute to check whether two customers who’ve signed up with you are using the same card number, for example.
363              
364             =head2 funding string
365              
366             Card funding type. Can be credit, debit, prepaid, or unknown.
367              
368             =head2 generated_card string
369              
370             ID of a card PaymentMethod generated from the card_present PaymentMethod that may be attached to a Customer for future transactions. Only present if it was possible to generate a card PaymentMethod.
371              
372             =head2 generated_from hash
373              
374             Details of the original PaymentMethod that created this object.
375              
376             =head2 iin string
377              
378             Issuer identification number of the card
379              
380             =head2 incremental_authorization_supported boolean
381              
382             Whether this L<PaymentIntent|https://stripe.com/docs/api/payment_intents> is eligible for incremental authorizations. Request support using L<requestI<incremental>authorization_support|https://stripe.com/docs/api/payment_intents/create#create_payment_intent-payment_method_options-card_present-request_incremental_authorization_support>.
383              
384             =head2 installments hash
385              
386             If present, this is a L<Net::API::Stripe::Payment::Installment> object. As of 2019-02-19, this is only used in Mexico though. See here for more information: L<https://stripe.com/docs/payments/installments>
387              
388             =head2 issuer string
389              
390             The name of the card's issuing bank
391              
392             =head2 last4 string
393              
394             The last four digits of the card.
395              
396             =head2 mandate string
397              
398             ID of the mandate used to make this payment.
399              
400             =head2 mandate_options
401              
402             Additional fields for Mandate creation
403              
404             This is just a property with an empty hash. There are a few instances of this on Stripe api documentation.
405              
406             =head2 metadata hash
407              
408             Set of key-value pairs that you can attach to an object. This can be useful for storing additional information about the object in a structured format.
409              
410             =head2 name string
411              
412             Cardholder name.
413              
414             =head2 network string preview feature
415              
416             Identifies which network this charge was processed on. Can be amex, diners, discover, interac, jcb, mastercard, unionpay, visa, or unknown.
417              
418             =head2 networks hash
419              
420             Contains information about card networks that can be used to process the payment.
421              
422             =over 4
423              
424             =item I<available> array containing strings
425              
426             All available networks for the card.
427              
428             =item I<preferred> string
429              
430             The preferred network for the card.
431              
432             =back
433              
434             =head2 overcapture_supported boolean
435              
436             Defines whether the authorized amount can be over-captured or not
437              
438             =head2 preferred_locales string_array
439              
440             EMV tag 5F2D. Preferred languages specified by the integrated circuit chip.
441              
442             =head2 read_method string
443              
444             How were card details read in this transaction. Can be contact_emv, contactless_emv, magnetic_stripe_fallback, magnetic_stripe_track2, or contactless_magstripe_mode
445              
446             =head2 receipt hash
447              
448             A collection of fields required to be displayed on receipts. Only required for EMV transactions.
449              
450             =over 4
451              
452             =item I<account_type> string
453              
454             The type of account being debited or credited
455              
456             =item I<application_cryptogram> string
457              
458             EMV tag 9F26, cryptogram generated by the integrated circuit chip.
459              
460             =item I<application_preferred_name> string
461              
462             Mnenomic of the Application Identifier.
463              
464             =item I<authorization_code> string
465              
466             Identifier for this transaction.
467              
468             =item I<authorization_response_code> string
469              
470             EMV tag 8A. A code returned by the card issuer.
471              
472             =item I<cardholder_verification_method> string
473              
474             How the cardholder verified ownership of the card.
475              
476             =item I<dedicated_file_name> string
477              
478             EMV tag 84. Similar to the application identifier stored on the integrated circuit chip.
479              
480             =item I<terminal_verification_results> string
481              
482             The outcome of a series of EMV functions performed by the card reader.
483              
484             =item I<transaction_status_information> string
485              
486             An indication of various EMV functions performed during the transaction.
487              
488             =back
489              
490             =head2 recipient string (expandable)
491              
492             The recipient that this card belongs to. This attribute will not be in the card object if the card belongs to a customer or account instead.
493              
494             Since 2017, Stripe recipients have been replaced by Stripe accounts: L<https://stripe.com/docs/connect/recipient-account-migrations>
495              
496             So this is a Stripe account id, or if expanded, a L<Net::API::Stripe::Connect::Account> object.
497              
498             =head2 reference string
499              
500             The unique reference of the mandate.
501              
502             =head2 request_extended_authorization
503              
504             Request ability to capture this payment beyond the standard L<authorization validity window|https://stripe.com/docs/terminal/features/extended-authorizations#authorization-validity>
505              
506             =head2 request_incremental_authorization_support
507              
508             Request ability to increment this PaymentIntent if the combination of MCC and card brand is eligible. Check L<incremental_authorization_supported|https://stripe.com/docs/api/charges/object#charge_object-payment_method_details-card_present-incremental_authorization_supported> in the L<Confirm|https://stripe.com/docs/api/payment_intents/confirm> response to verify support.
509              
510             =head2 request_three_d_secure string
511              
512             We strongly recommend that you rely on our SCA Engine to automatically prompt your customers for authentication based on risk level and other requirements. However, if you wish to request 3D Secure based on logic from your own fraud engine, provide this option. Permitted values include: C<automatic> or C<any>. If not provided, defaults to C<automatic>. Read our guide on manually requesting 3D Secure for more information on how this configuration interacts with Radar and our SCA Engine.
513              
514             =head2 status string
515              
516             For external accounts, possible values are C<new> and C<errored>. If a transfer fails, the status is set to C<errored> and transfers are stopped until account details are updated.
517              
518             =head2 three_d_secure hash
519              
520             Populated if this transaction used 3D Secure authentication.
521              
522             This is an objectified hash reference, ie its key / value pairs can be accessed as virtual methods. It uses the virtal package L<Net::API::Stripe::Payment::3DSecure>
523              
524             =over 4
525              
526             =item I<authenticated> boolean
527              
528             Whether or not authentication was performed. 3D Secure will succeed without authentication when the card is not enrolled.
529              
530             =item I<authentication_flow> string
531              
532             For authenticated transactions: how the customer was authenticated by the issuing bank.
533              
534             =item I<result> string
535              
536             Indicates the outcome of 3D Secure authentication.
537              
538             =item I<result_reason> string
539              
540             Additional information about why 3D Secure succeeded or failed based on the C<result>.
541              
542             =item I<succeeded> boolean
543              
544             Whether or not 3D Secure succeeded.
545              
546             =item I<version> string
547              
548             The version of 3D Secure that was used for this payment.
549              
550             =back
551              
552             =head2 three_d_secure_usage hash
553              
554             Contains details on how this Card maybe be used for 3D Secure authentication.
555              
556             This is a virtual L<Net::API::Stripe::Payment::3DUsage> object ie whereby each key can be accessed as methods.
557              
558             =over 4
559              
560             =item I<supported> boolean
561              
562             Whether 3D Secure is supported on this card.
563              
564             =back
565              
566             =head2 tokenization_method string
567              
568             If the card number is tokenized, this is the method that was used. Can be apple_pay or google_pay.
569              
570             =head2 url string
571              
572             The URL of the mandate. This URL generally contains sensitive information about the customer and should be shared with them exclusively.
573              
574             =head2 wallet hash
575              
576             If this Card is part of a card wallet, this contains the details of the card wallet.
577              
578             It has the following properties:
579              
580             =over 4
581              
582             =item I<amex_express_checkout> hash
583              
584             If this is a C<amex_express_checkout> card wallet, this hash contains details about the wallet.
585              
586             =over 8
587              
588             =item I<amex_express_checkout>
589              
590             This is an empty hash.
591              
592             =back
593              
594             =item I<apple_pay> hash
595              
596             If this is a C<apple_pay> card wallet, this hash contains details about the wallet.
597              
598             =over 8
599              
600             =item I<apple_pay>
601              
602             This is an empty hash.
603              
604             =back
605              
606             =item I<dynamic_last4> string
607              
608             (For tokenized numbers only.) The last four digits of the device account number.
609              
610             =item I<google_pay> hash
611              
612             If this is a C<google_pay> card wallet, this hash contains details about the wallet.
613              
614             =over 8
615              
616             =item I<google_pay>
617              
618             This is an empty hash.
619              
620             =back
621              
622             =item I<masterpass> hash
623              
624             If this is a C<masterpass> card wallet, this hash contains details about the wallet.
625              
626             =over 8
627              
628             =item I<billing_address> hash
629              
630             Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
631              
632             When expanded, this is a L<Net::API::Stripe::Address> object.
633              
634             =item I<email> string
635              
636             Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
637              
638             =item I<name> string
639              
640             Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
641              
642             =item I<shipping_address> hash
643              
644             Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
645              
646             When expanded, this is a L<Net::API::Stripe::Address> object.
647              
648             =back
649              
650             =item I<samsung_pay> hash
651              
652             If this is a C<samsung_pay> card wallet, this hash contains details about the wallet.
653              
654             =over 8
655              
656             =item I<samsung_pay>
657              
658             This is an empty hash.
659              
660             =back
661              
662             =item I<type> string
663              
664             The type of the card wallet, one of C<amex_express_checkout>, C<apple_pay>, C<google_pay>, C<masterpass>, C<samsung_pay>, or C<visa_checkout>. An additional hash is included on the Wallet subhash with a name matching this value. It contains additional information specific to the card wallet type.
665              
666             =item I<visa_checkout> hash
667              
668             If this is a C<visa_checkout> card wallet, this hash contains details about the wallet.
669              
670             =over 8
671              
672             =item I<billing_address> hash
673              
674             Owner's verified billing address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
675              
676             When expanded, this is a L<Net::API::Stripe::Address> object.
677              
678             =item I<email> string
679              
680             Owner's verified email. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
681              
682             =item I<name> string
683              
684             Owner's verified full name. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
685              
686             =item I<shipping_address> hash
687              
688             Owner's verified shipping address. Values are verified or provided by the wallet directly (if supported) at the time of authorization or settlement. They cannot be set or mutated.
689              
690             When expanded, this is a L<Net::API::Stripe::Address> object.
691              
692             =back
693              
694             =back
695              
696             =head1 API SAMPLE
697              
698             {
699             "id": "card_fake123456789",
700             "object": "card",
701             "address_city": null,
702             "address_country": null,
703             "address_line1": null,
704             "address_line1_check": null,
705             "address_line2": null,
706             "address_state": null,
707             "address_zip": null,
708             "address_zip_check": null,
709             "brand": "Visa",
710             "country": "US",
711             "customer": null,
712             "cvc_check": null,
713             "dynamic_last4": null,
714             "exp_month": 8,
715             "exp_year": 2020,
716             "fingerprint": "lkavkajndvkdvnj",
717             "funding": "credit",
718             "last4": "4242",
719             "metadata": {},
720             "name": null,
721             "tokenization_method": null
722             }
723              
724             =head1 HISTORY
725              
726             =head2 v0.1
727              
728             Initial version
729              
730             =head2 v0.2
731              
732             Added the method B<address> to make it easy to pass a L<Net::API::Stripe::Address> object or an hash reference to populate automatically the properties I<address_line1>, I<address_line2>, I<address_city>, I<address_zip> and I<address_country>
733              
734             =head1 STRIPE HISTORY
735              
736             =head2 2018-01-23
737              
738             When being viewed by a platform, cards and bank accounts created on behalf of connected accounts will have a fingerprint that is universal across all connected accounts. For accounts that are not connect platforms, there will be no change.
739              
740             =head1 AUTHOR
741              
742             Jacques Deguest E<lt>F<jack@deguest.jp>E<gt>
743              
744             =head1 SEE ALSO
745              
746             Stripe API documentation:
747              
748             L<https://stripe.com/docs/api/external_account_cards/object>, L<https://stripe.com/docs/connect/payouts>
749              
750             =head1 COPYRIGHT & LICENSE
751              
752             Copyright (c) 2019-2020 DEGUEST Pte. Ltd.
753              
754             You can use, copy, modify and redistribute this package and associated
755             files under the same terms as Perl itself.
756              
757             =cut