xref: /OpenGrok/opengrok-indexer/src/test/resources/sources/perl/main.pl (revision 2bcacabbe843448903326d34ff21a265b5f37596)
1#!/usr/bin/perl
2
3#
4# CDDL HEADER START
5#
6# The contents of this file are subject to the terms of the
7# Common Development and Distribution License (the "License").
8# You may not use this file except in compliance with the License.
9#
10# See LICENSE.txt included in this distribution for the specific
11# language governing permissions and limitations under the License.
12#
13# When distributing Covered Code, include this CDDL HEADER in each
14# file and include the License file at LICENSE.txt.
15# If applicable, add the following below this CDDL HEADER, with the
16# fields enclosed by brackets "[]" replaced with your own identifying
17# information: Portions Copyright [yyyy] [name of copyright owner]
18#
19# CDDL HEADER END
20#
21
22#
23# Copyright (c) 2010, 2016, Oracle and/or its affiliates. All rights reserved.
24# Portions Copyright (c) 2017, Chris Fraire <cfraire@me.com>.
25#
26
27use warnings;
28
29   use DBI;
30
31   my $database='dbi:DB2:sample';
32   my $user='';
33   my $password='';
34
35   my $dbh = DBI->connect($database, $user, $password)
36      or die "Can't connect to $database: $DBI::errstr";
37
38   my $sth = $dbh->prepare(
39      q{ SELECT firstnme, lastname
40         FROM employee }
41      )
42      or die "Can't prepare statement: $DBI::errstr";
43
44   my $rc = $sth->execute
45      or die "Can't execute statement: $DBI::errstr";
46
47   print "Query will return $sth->{NUM_OF_FIELDS} fields.\n\n";
48   print "$sth->{NAME}->[0]: $sth->{NAME}->[1]\n";
49
50   while (($firstnme, $lastname) = $sth->fetchrow()) {
51      print "$firstnme: $lastname\n";
52   }
53
54   # check for problems which may have terminated the fetch early
55   warn $DBI::errstr if $DBI::err;
56
57   $sth->finish;
58   $dbh->disconnect;
59
60=item snazzle($)
61
62The snazzle() function will behave in the most spectacular
63form that you can possibly imagine, not even excepting
64cybernetic pyrotechnics.
65
66=cut back to the compiler, nuff of this pod stuff!
67
68sub snazzle($) {
69my $thingie = shift;
70}
71
72my $x;
73$x=12345;              # integer
74$x=-54321;             # negative integer
75$x=12345.67;           # floating point
76$x=6.02E23;            # scientific notation
77$x=0xffff;             # hexadecimal
78$x=0377;               # octal
79$x=4_294_967_296;      # underline for legibility
80
81#
82# The following should be marked-up in the same manner as for all sigiled
83# identifiers.
84#
85$s = $var;
86$s = \$var;
87$s = ${var};
88
89#
90# include "<<EOF" examples from
91# https://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators
92#
93
94print <<EOF;
95The price is $Price.
96EOF
97print << "EOF"; # same as above
98The price is $Price.
99EOF
100
101my $cost = <<'VISTA';  # hasta la ...
102That'll be $10 please, ma'am.
103VISTA
104$cost = <<\VISTA;   # Same thing!
105That'll be $10 please, ma'am.
106VISTA
107
108print << `EOC`; # execute command and get results
109echo hi there
110EOC
111
112if ($some_var) {
113	print <<~EOF;
114	This is a here-doc
115	EOF
116}
117
118print <<~EOF;
119	This text is not indented
120	This text is indented with two spaces
121		This text is indented with two tabs
122EOF
123
124print <<~ 'EOF';
125	This text is not indented
126	This text is indented with two spaces
127		This text is indented with two tabs
128EOF
129
130print <<"foo", <<"bar"; # you can stack them
131I said foo.
132foo
133I said bar.
134bar
135
136myfunc(<< "THIS", 23, <<'THAT');
137Here's a line or
138two
139THIS
140and here's another.
141THAT
142
143#
144# Include some samples for the shortcut // syntax of m//
145#
146
147$var =~ /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ && print;
148$var !~/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ && print;
149/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./ && print;
150(/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) && print;
151if (/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) { print; }
152if (1 && /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) { print; }
153if (0 || /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./) { print; }
154print or/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
155print if /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
156print unless
157
158
159	/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
160
161my @o = $contents =~
162
163
164    /^(?>\S+) \s* := \s* LINKSRC \s* = \s* \S+/mxg;
165
166foreach my $v (@o) { # This loop shouldn't mistakenly be inside the previous m//
167	print $v;
168}
169
170#
171# The following table is from
172# https://perldoc.perl.org/perlop.html#Quote-and-Quote-like-Operators .
173# The samples following are generated per the table.
174#
175#	Customary Generic     Meaning	     Interpolates
176#	''	 q{}	      Literal		  no
177#	""	qq{}	      Literal		  yes
178#	``	qx{}	      Command		  yes*
179#		qw{}	     Word list		  no
180#	//	 m{}	   Pattern match	  yes*
181#		qr{}	      Pattern		  yes*
182#		 s{}{}	    Substitution	  yes*
183#		tr{}{}	  Transliteration	  no (but see below)
184#		 y{}{}
185#
186
187$s = 'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.';
188$s = q{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.};
189$s = q[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.];
190$s = q(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.);
191$s = q<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>;
192$s = q/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
193$s = q zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z;
194$s = q#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#;
195$s = q'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.';
196$s = q"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.";
197$s = "pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.";
198$s = qq{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.};
199$s = qq[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.];
200$s = qq(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.);
201$s = qq<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>;
202$s = qq/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
203$s = qq zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z;
204$s = qq#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#;
205$s = qq'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.';
206$s = qq"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.";
207$s = `pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.`;
208$s = qx{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.};
209$s = qx[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.];
210$s = qx(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.);
211$s = qx<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>;
212$s = qx/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
213$s = qx zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z;
214$s = qx#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#;
215$s = qx'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.';
216$s = qx"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.";
217use vars qw{$Cannot %embed &punctuation *here @except $sigils};
218use vars qw[$Cannot %embed &punctuation *here @except $sigils];
219use vars qw($Cannot %embed &punctuation *here @except $sigils);
220use vars qw<$Cannot %embed &punctuation *here @except $sigils>;
221use vars qw/$Cannot %embed &punctuation *here @except $sigils/;
222use vars qw z$Cannot %embed &punctuation *here @except $sigilsz;
223use vars qw#$Cannot %embed &punctuation *here @except $sigils#;
224use vars qw'$Cannot %embed &punctuation *here @except $sigils';
225use vars qw"$Cannot %embed &punctuation *here @except $sigils";
226$s = /pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
227$s = m{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.};
228$s = m[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.];
229$s = m(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.);
230$s = m<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>;
231$s = m/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
232$s = m zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z;
233$s = m#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#;
234$s = m'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.';
235$s = m"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.";
236$s = qr{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.};
237$s = qr[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.];
238$s = qr(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.);
239$s = qr<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>;
240$s = qr/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./;
241$s = qr zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z;
242$s = qr#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#;
243$s = qr'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.';
244$s = qr"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.";
245$s = s{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.
246    }{pP {{nest}}\"\'\(\)\<\>\[\]\/\# et $var.}x;
247$s = s[pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.
248    ][pP [[nest]]\"\'\(\)\<\>\{\}\/\# et $var.]x;
249$s = s(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.
250    )(pP ((nest))\"\'\<\>\{\}\[\]\/\# et $var.)x;
251$s = s<pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.
252    ><pP <<nest>>\"\'\(\)\{\}\[\]\/\# et $var.>x;
253$s = s/pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./
254    pP \"\'\(\)\<\>\{\}\[\]\/\# et $var./x;
255$s = s zpP \"\'\(\)\<\>\{\}\[\]\/\# et $var.z
256    pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.zx;
257$s = s#pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#
258    pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.#x;
259$s = s'pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'
260    pP \"\'\(\)\<\>\{\}\[\]\/\# et $var.'x;
261$s = s"pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."
262    pP \"\'\(\)\<\>\{\}\[\]\/\# et $var."x;
263$s = tr{pP \"\'\(\)\<\>\[\]\/\# fin.}{pP \"\'\(\)\<\>\[\]\/\# fin.};
264$s = tr[pP \"\'\(\)\<\>\{\}\/\# fin.][pP \"\'\(\)\<\>\{\}\/\# fin.];
265$s = tr(pP \"\'\<\>\{\}\[\]\/\# fin.)(pP \"\'\<\>\{\}\[\]\/\# fin.);
266$s = tr<pP \"\'\(\)\{\}\[\]\/\# fin.><pP \"\'\(\)\{\}\[\]\/\# fin.>;
267$s = tr/pP \"\'\(\)\<\>\{\}\[\]\/\# fin./pP \"\'\(\)\<\>\{\}\[\]\/\# fin./;
268$s = tr zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.z;
269$s = tr#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#;
270$s = tr'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.';
271$s = tr"pP \"\'\(\)\<\>\{\}\[\]\/\# fin."pP \"\'\(\)\<\>\{\}\[\]\/\# fin.";
272$s = y{pP \"\'\(\)\<\>\[\]\/\# fin.}{pP \"\'\(\)\<\>\[\]\/\# fin.};
273$s = y[pP \"\'\(\)\<\>\{\}\/\# fin.][pP \"\'\(\)\<\>\{\}\/\# fin.];
274$s = y(pP \"\'\<\>\{\}\[\]\/\# fin.)(pP \"\'\<\>\{\}\[\]\/\# fin.);
275$s = y<pP \"\'\(\)\{\}\[\]\/\# fin.><pP \"\'\(\)\{\}\[\]\/\# fin.>;
276$s = y/pP \"\'\(\)\<\>\{\}\[\]\/\# fin./pP \"\'\(\)\<\>\{\}\[\]\/\# fin./;
277$s = y zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.zpP \"\'\(\)\<\>\{\}\[\]\/\# fin.z;
278$s = y#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#pP \"\'\(\)\<\>\{\}\[\]\/\# fin.#;
279$s = y'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.'pP \"\'\(\)\<\>\{\}\[\]\/\# fin.';
280$s = y"pP \"\'\(\)\<\>\{\}\[\]\/\# fin."pP \"\'\(\)\<\>\{\}\[\]\/\# fin.";
281
282# more sigiled identifier tests
283print "$abc\n${abc}\n", '$abc\n${abc}\n', "\n";
284$s = $ {var};
285$s = ${ var };
286print qr z$abczix, "\n";
287print $0 if $!;
288print $^V;
289print "${^GLOBAL_PHASE} is what?";
290
291# more quote-like tests
292qr{\.[a-z]+$}i;
293
294# should back to YYINITIAL after HERE document
295print <<EOF;
296	Some text
297EOF
298/\b sentinel \b/ && print; # This should heuristically match as m//
299
300# spaced sigil
301$ svar = 1;
302
303# more quote-like tests
304s{\.[a-z]+$}{no}i;
305my $a = qr$abc$ix;
306
307# more POD tests
308=cut for no purpose
309print "1\n";
310
311# POD odd case
312=ITEM fubar($)
313=CUT back -- not really though
314n0n{(sense]
315=cut back really
316print "1\n";
317
318# format FORMLIST tests
319 format STDOUT =
320@<<<<<<   @||||||   @>>>>>>
321# comment <args to follow>
322"left",  substr($var, 0, 2), "\$right"
323 ...
324 print
325.
326print "1\n";
327
328# some tests for syntax near "s" characters
329my $this = {};
330if (! -s $this->{filename}) {
331	open UCFILE, "create_file -s $this->{start} -e $this->{end} |" or exit 0;
332} else {
333	open UCFILE, "$this->{filename}" or exit 0;
334}
335
336# more quote-like tests
337my $KK = "b";
338$bref = {'b' => 5};
339%bhash = ('b' => 6);
340{ print $bref -> {$KK} / $bhash { $KK }, "$bref->{$KK} $bhash{$KK} $b {\n"; }
341$bref->{int} = -1 * $bref->{int} / $bref->{a_rate}; # do not infer a m//
342$bref->{"int"} = -1 * $bref->{"int"} / $bref->{"a_rate"}; # do not infer a m//
343$var = qq[select t.col
344	from $table
345	where key = $k
346	and k1 = "$r->[0]->[0]"
347	and k2 = "$s->{ code }->{ v }"
348	and k3 = "$t ->[ 0 ]->{ v }"
349	and k4 = "$u ->{ k }->[ 0 ]"
350	order by value_date DESC];
351push @$html, "<TD width=\"20%\">";
352print "%\abc\n", %\, "abc\n";
353# some comment
354push @arr, "'$key'=>" . 'q[' . $val . '],';
355#qq[$var]
356
357# more HERE-document tests
358myfunc2(<< "THIS", $var, <<~'THAT', $var, <<OTHER, <<\ELSE, <<`Z`);
359Here's a $line1
360THIS
361	Here's a $line2
362	THAT
363Here's a $line3
364OTHER
365Here's a $line4
366ELSE
367Here's a $line5
368Here's a \$line6
369Z
370/\b sentinel \b/ && print; # This should heuristically match as m//
371
372# more quote-like tests
373for my $k (grep /=/, split /;/, $d, -1) {
374	print "1\n";
375}
376
377# more format tests
378%a = (
379    format => "%s");
380 format=
381@<<<<<<   @||||||   @>>>>>>
382"left",  "middle", "right"
383.
384print "1\n";
385