Current Path: > > bin
Operation : Linux premium107.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64 Software : Apache Server IP : 198.54.126.246 | Your IP: 216.73.216.181 Domains : 1034 Domain(s) Permission : [ 0555 ]
| Name | Type | Size | Last Modified | Actions |
|---|---|---|---|---|
| 7za | File | 46 bytes | October 04 2024 01:50:29. | |
| GET | File | 16217 bytes | April 22 2022 20:13:06. | |
| File | 418704 bytes | October 13 2019 00:19:50. | ||
| [ | File | 54864 bytes | December 18 2025 13:54:40. | |
| aclocal | File | 36478 bytes | October 14 2023 20:00:43. | |
| aclocal-1.16 | File | 36478 bytes | October 14 2023 20:00:43. | |
| addr2line | File | 34224 bytes | December 18 2025 14:21:35. | |
| animate | File | 12128 bytes | April 01 2025 13:15:58. | |
| ar | File | 63448 bytes | December 18 2025 14:21:35. | |
| arch | File | 38232 bytes | December 18 2025 13:54:40. | |
| arpaname | File | 12104 bytes | November 06 2025 07:45:52. | |
| as | File | 911264 bytes | December 18 2025 14:21:35. | |
| aspell | File | 163328 bytes | April 18 2022 15:10:53. | |
| at | File | 1276 bytes | October 10 2022 10:23:17. | |
| atq | File | 1278 bytes | October 10 2022 10:23:17. | |
| atrm | File | 1280 bytes | October 10 2022 10:23:17. | |
| autoconf | File | 14768 bytes | August 13 2024 19:30:48. | |
| autoheader | File | 8534 bytes | August 13 2024 19:30:48. | |
| autom4te | File | 32181 bytes | August 13 2024 19:30:48. | |
| automake | File | 257949 bytes | October 14 2023 20:00:43. | |
| automake-1.16 | File | 257949 bytes | October 14 2023 20:00:43. | |
| autoreconf | File | 21066 bytes | August 13 2024 19:30:48. | |
| autoscan | File | 17124 bytes | August 13 2024 19:30:48. | |
| autoupdate | File | 33872 bytes | August 13 2024 19:30:48. | |
| awk | File | 685848 bytes | April 18 2022 15:56:05. | |
| b2sum | File | 59072 bytes | December 18 2025 13:54:40. | |
| base32 | File | 42464 bytes | December 18 2025 13:54:40. | |
| base64 | File | 42488 bytes | December 18 2025 13:54:40. | |
| basename | File | 38312 bytes | December 18 2025 13:54:40. | |
| bash | File | 1154680 bytes | August 26 2025 08:48:39. | |
| bashbug-64 | File | 7348 bytes | August 26 2025 08:48:31. | |
| batch | File | 137 bytes | October 10 2022 10:23:17. | |
| bison | File | 448224 bytes | October 12 2019 12:28:39. | |
| bunzip2 | File | 37744 bytes | January 28 2025 01:38:59. | |
| bzcat | File | 37744 bytes | January 28 2025 01:38:59. | |
| bzcmp | File | 2128 bytes | January 28 2025 01:38:58. | |
| bzdiff | File | 2128 bytes | January 28 2025 01:38:58. | |
| bzgrep | File | 1677 bytes | January 28 2025 01:38:58. | |
| bzip2 | File | 37744 bytes | January 28 2025 01:38:59. | |
| bzip2recover | File | 16832 bytes | January 28 2025 01:38:59. | |
| bzless | File | 1259 bytes | January 28 2025 01:38:58. | |
| bzmore | File | 1259 bytes | January 28 2025 01:38:58. | |
| c++ | File | 1266616 bytes | August 26 2025 09:47:24. | |
| c++filt | File | 29584 bytes | December 18 2025 14:21:35. | |
| c89 | File | 224 bytes | August 26 2025 09:45:19. | |
| c99 | File | 215 bytes | August 26 2025 09:45:19. | |
| cagefs_enter.proxied | File | 1296 bytes | January 20 2026 13:58:37. | |
| cal | File | 67560 bytes | February 04 2026 20:18:19. | |
| captoinfo | File | 87360 bytes | October 14 2023 18:54:49. | |
| cat | File | 38360 bytes | December 18 2025 13:54:40. | |
| catchsegv | File | 3283 bytes | December 08 2025 09:36:48. | |
| cc | File | 1266576 bytes | August 26 2025 09:47:26. | |
| chgrp | File | 67864 bytes | December 18 2025 13:54:40. | |
| chmod | File | 63688 bytes | December 18 2025 13:54:40. | |
| chown | File | 71976 bytes | December 18 2025 13:54:40. | |
| chrt | File | 38080 bytes | February 04 2026 20:18:19. | |
| cksum | File | 38288 bytes | December 18 2025 13:54:40. | |
| cldetect | File | 10593 bytes | December 24 2025 15:45:26. | |
| clear | File | 12840 bytes | October 14 2023 18:54:49. | |
| clusterdb | File | 71920 bytes | February 27 2024 08:25:00. | |
| cmp | File | 106248 bytes | May 04 2020 15:15:14. | |
| col | File | 29704 bytes | February 04 2026 20:18:19. | |
| colcrt | File | 16872 bytes | February 04 2026 20:18:19. | |
| colrm | File | 25480 bytes | February 04 2026 20:18:19. | |
| column | File | 50656 bytes | February 04 2026 20:18:19. | |
| comm | File | 42560 bytes | December 18 2025 13:54:40. | |
| compare | File | 12136 bytes | April 01 2025 13:15:58. | |
| composite | File | 12120 bytes | April 01 2025 13:15:58. | |
| conjure | File | 12120 bytes | April 01 2025 13:15:58. | |
| convert | File | 12120 bytes | April 01 2025 13:15:58. | |
| cp | File | 151568 bytes | December 18 2025 13:54:40. | |
| cpan | File | 8370 bytes | June 03 2025 14:32:21. | |
| cpp | File | 1266552 bytes | August 26 2025 09:47:25. | |
| createdb | File | 71904 bytes | February 27 2024 08:25:00. | |
| createuser | File | 76416 bytes | February 27 2024 08:25:00. | |
| crontab | File | 1524 bytes | April 06 2024 11:40:05. | |
| crontab.cagefs | File | 55456 bytes | January 20 2026 14:24:20. | |
| csplit | File | 54968 bytes | December 18 2025 13:54:40. | |
| curl | File | 235600 bytes | December 18 2025 14:22:12. | |
| cut | File | 50704 bytes | December 18 2025 13:54:40. | |
| date | File | 108496 bytes | December 18 2025 13:54:40. | |
| dd | File | 79840 bytes | December 18 2025 13:54:40. | |
| delv | File | 43480 bytes | November 06 2025 07:45:52. | |
| df | File | 93272 bytes | December 18 2025 13:54:40. | |
| diff | File | 274440 bytes | May 04 2020 15:15:14. | |
| diff3 | File | 131688 bytes | May 04 2020 15:15:14. | |
| dig | File | 166072 bytes | November 06 2025 07:45:52. | |
| dir | File | 143256 bytes | December 18 2025 13:54:40. | |
| dircolors | File | 50744 bytes | December 18 2025 13:54:40. | |
| dirname | File | 34160 bytes | December 18 2025 13:54:40. | |
| display | File | 12128 bytes | April 01 2025 13:15:58. | |
| dnstap-read | File | 20920 bytes | November 06 2025 07:45:52. | |
| dropdb | File | 67608 bytes | February 27 2024 08:25:00. | |
| dropuser | File | 67576 bytes | February 27 2024 08:25:00. | |
| du | File | 109568 bytes | December 18 2025 13:54:40. | |
| easy_install-3 | File | bytes | January 01 1970 00:00:00. | |
| echo | File | 38248 bytes | December 18 2025 13:54:40. | |
| egrep | File | 28 bytes | October 11 2019 15:15:56. | |
| enc2xs | File | 41958 bytes | October 13 2019 08:46:10. | |
| enchant | File | 21584 bytes | October 23 2019 20:03:55. | |
| enchant-lsmod | File | 13408 bytes | October 23 2019 20:03:55. | |
| env | File | 42344 bytes | December 18 2025 13:54:40. | |
| eps2eps | File | 639 bytes | June 03 2025 02:48:11. | |
| eqn | File | 237728 bytes | October 13 2019 14:29:41. | |
| ex | File | 1180352 bytes | October 12 2025 00:23:15. | |
| expand | File | 42592 bytes | December 18 2025 13:54:40. | |
| expr | File | 50760 bytes | December 18 2025 13:54:40. | |
| factor | File | 88032 bytes | December 18 2025 13:54:40. | |
| false | File | 34120 bytes | December 18 2025 13:54:40. | |
| fc-cache | File | 132 bytes | August 16 2021 11:04:22. | |
| fc-cache-64 | File | 20840 bytes | October 09 2021 09:02:09. | |
| fc-cat | File | 16744 bytes | October 09 2021 09:02:09. | |
| fc-conflist | File | 12544 bytes | October 09 2021 09:02:09. | |
| fc-list | File | 12544 bytes | October 09 2021 09:02:09. | |
| fc-match | File | 16648 bytes | October 09 2021 09:02:09. | |
| fc-pattern | File | 12552 bytes | October 09 2021 09:02:09. | |
| fc-query | File | 12536 bytes | October 09 2021 09:02:09. | |
| fc-scan | File | 12552 bytes | October 09 2021 09:02:09. | |
| fc-validate | File | 16648 bytes | October 09 2021 09:02:09. | |
| fgrep | File | 28 bytes | October 11 2019 15:15:56. | |
| file | File | 25280 bytes | October 07 2025 06:30:49. | |
| find | File | 228632 bytes | December 18 2025 14:57:01. | |
| flex | File | 438728 bytes | October 12 2019 12:33:17. | |
| flex++ | File | 438728 bytes | October 12 2019 12:33:17. | |
| flock | File | 33992 bytes | February 04 2026 20:18:19. | |
| fmt | File | 46584 bytes | December 18 2025 13:54:40. | |
| fold | File | 42408 bytes | December 18 2025 13:54:40. | |
| free | File | 21288 bytes | October 14 2023 20:31:02. | |
| freetype-config | File | 4416 bytes | March 31 2025 19:37:30. | |
| funzip | File | 37504 bytes | June 03 2025 02:10:12. | |
| g++ | File | 1266616 bytes | August 26 2025 09:47:24. | |
| gawk | File | 685848 bytes | April 18 2022 15:56:05. | |
| gcc | File | 1266576 bytes | August 26 2025 09:47:26. | |
| gcc-ar | File | 37536 bytes | August 26 2025 09:47:26. | |
| gcc-nm | File | 37536 bytes | August 26 2025 09:47:26. | |
| gcc-ranlib | File | 37536 bytes | August 26 2025 09:47:26. | |
| gcov | File | 1377408 bytes | August 26 2025 09:47:26. | |
| gcov-dump | File | 584664 bytes | August 26 2025 09:47:26. | |
| gcov-tool | File | 622360 bytes | August 26 2025 09:47:26. | |
| gem | File | 542 bytes | May 14 2025 12:40:38. | |
| gencat | File | 25432 bytes | December 08 2025 09:43:19. | |
| geoiplookup | File | 22416 bytes | November 28 2019 22:06:01. | |
| geoiplookup6 | File | 22168 bytes | November 28 2019 22:06:01. | |
| geqn | File | 237728 bytes | October 13 2019 14:29:41. | |
| getconf | File | 33240 bytes | December 08 2025 09:43:19. | |
| getent | File | 33920 bytes | December 08 2025 09:43:19. | |
| getopt | File | 21024 bytes | February 04 2026 20:18:19. | |
| ghostscript | File | 12648 bytes | June 03 2025 02:48:22. | |
| git | File | 3845928 bytes | July 23 2025 06:59:57. | |
| git-receive-pack | File | 3845928 bytes | July 23 2025 06:59:57. | |
| git-shell | File | 2236688 bytes | July 23 2025 06:59:57. | |
| git-upload-archive | File | 3845928 bytes | July 23 2025 06:59:57. | |
| git-upload-pack | File | 3845928 bytes | July 23 2025 06:59:57. | |
| gm | File | 8008 bytes | March 28 2022 15:50:37. | |
| gmake | File | 240968 bytes | April 18 2022 16:38:34. | |
| gneqn | File | 908 bytes | October 13 2019 14:29:37. | |
| gnroff | File | 3312 bytes | October 13 2019 14:29:39. | |
| gpg | File | 1090344 bytes | January 16 2026 01:48:25. | |
| gpg-agent | File | 429360 bytes | January 16 2026 01:48:25. | |
| gpg-error | File | 34976 bytes | October 12 2019 12:20:46. | |
| gpg-zip | File | 3525 bytes | January 16 2026 01:48:21. | |
| gpgsplit | File | 89112 bytes | January 16 2026 01:48:25. | |
| gpgv | File | 462344 bytes | January 16 2026 01:48:25. | |
| gpic | File | 300896 bytes | October 13 2019 14:29:41. | |
| gprof | File | 105832 bytes | December 18 2025 14:21:35. | |
| grep | File | 198280 bytes | October 11 2019 15:15:57. | |
| groff | File | 127920 bytes | October 13 2019 14:29:41. | |
| grops | File | 195728 bytes | October 13 2019 14:29:41. | |
| grotty | File | 145304 bytes | October 13 2019 14:29:41. | |
| groups | File | 38288 bytes | December 18 2025 13:54:40. | |
| gs | File | 12648 bytes | June 03 2025 02:48:22. | |
| gsnd | File | 277 bytes | June 03 2025 02:48:11. | |
| gsoelim | File | 43576 bytes | October 13 2019 14:29:41. | |
| gtar | File | 459768 bytes | August 26 2025 08:57:37. | |
| gtbl | File | 158320 bytes | October 13 2019 14:29:41. | |
| gtroff | File | 824344 bytes | October 13 2019 14:29:41. | |
| gunzip | File | 2345 bytes | April 27 2022 05:49:28. | |
| gzexe | File | 6375 bytes | April 27 2022 05:49:28. | |
| gzip | File | 96944 bytes | April 27 2022 05:49:29. | |
| h2ph | File | 29382 bytes | July 28 2025 08:08:32. | |
| h2xs | File | 60866 bytes | July 28 2025 08:07:09. | |
| head | File | 46592 bytes | December 18 2025 13:54:40. | |
| hexdump | File | 58888 bytes | February 04 2026 20:18:19. | |
| host | File | 145704 bytes | November 06 2025 07:45:52. | |
| hostid | File | 34136 bytes | December 18 2025 13:54:40. | |
| hostname | File | 21664 bytes | October 11 2019 13:06:51. | |
| hunspell | File | 148168 bytes | October 13 2019 08:33:15. | |
| iconv | File | 62904 bytes | December 08 2025 09:43:19. | |
| id | File | 46528 bytes | December 18 2025 13:54:40. | |
| identify | File | 12128 bytes | April 01 2025 13:15:58. | |
| idn | File | 40352 bytes | October 13 2019 16:55:35. | |
| ifnames | File | 4128 bytes | August 13 2024 19:30:48. | |
| import | File | 12120 bytes | April 01 2025 13:15:58. | |
| infocmp | File | 62512 bytes | October 14 2023 18:54:49. | |
| infotocap | File | 87360 bytes | October 14 2023 18:54:49. | |
| install | File | 159912 bytes | December 18 2025 13:54:40. | |
| instmodsh | File | 4194 bytes | October 13 2019 08:55:21. | |
| ionice | File | 29680 bytes | February 04 2026 20:18:19. | |
| ipcrm | File | 29688 bytes | February 04 2026 20:18:19. | |
| ipcs | File | 54680 bytes | February 04 2026 20:18:19. | |
| isosize | File | 25480 bytes | February 04 2026 20:18:19. | |
| ispell | File | 988 bytes | April 18 2022 15:10:51. | |
| join | File | 54984 bytes | December 18 2025 13:54:40. | |
| kill | File | 38176 bytes | February 04 2026 20:18:19. | |
| ld | File | 1789080 bytes | December 18 2025 14:21:35. | |
| ld.bfd | File | 1789080 bytes | December 18 2025 14:21:35. | |
| ldd | File | 5441 bytes | December 08 2025 09:36:51. | |
| less | File | 177928 bytes | July 02 2024 20:10:37. | |
| lessecho | File | 12696 bytes | July 02 2024 20:10:37. | |
| lesskey | File | 22520 bytes | July 02 2024 20:10:37. | |
| lesspipe.sh | File | 3143 bytes | July 02 2024 19:57:10. | |
| lex | File | 438728 bytes | October 12 2019 12:33:17. | |
| libnetcfg | File | 15775 bytes | July 28 2025 08:08:32. | |
| libtool | File | 367724 bytes | October 11 2019 14:55:28. | |
| libtoolize | File | 129197 bytes | October 11 2019 14:55:28. | |
| link | File | 34136 bytes | December 18 2025 13:54:40. | |
| ln | File | 72192 bytes | December 18 2025 13:54:40. | |
| locale | File | 57800 bytes | December 08 2025 09:43:19. | |
| localedef | File | 314848 bytes | December 08 2025 09:43:19. | |
| logger | File | 51184 bytes | February 04 2026 20:18:19. | |
| login | File | 41944 bytes | February 04 2026 20:18:19. | |
| logname | File | 34144 bytes | December 18 2025 13:54:40. | |
| look | File | 16856 bytes | February 04 2026 20:18:19. | |
| ls | File | 143248 bytes | December 18 2025 13:54:40. | |
| lynx | File | 1928720 bytes | April 18 2022 21:01:05. | |
| m4 | File | 190016 bytes | October 11 2019 14:41:40. | |
| File | 418704 bytes | October 13 2019 00:19:50. | ||
| mailx | File | 418704 bytes | October 13 2019 00:19:50. | |
| make | File | 240968 bytes | April 18 2022 16:38:34. | |
| make-dummy-cert | File | 610 bytes | January 08 2026 13:57:14. | |
| mariadb | File | 5605864 bytes | November 28 2025 17:50:10. | |
| mariadb-access | File | 112112 bytes | November 28 2025 17:50:11. | |
| mariadb-admin | File | 5126776 bytes | November 28 2025 17:50:10. | |
| mariadb-binlog | File | 5411576 bytes | November 28 2025 17:50:10. | |
| mariadb-check | File | 5123960 bytes | November 28 2025 17:50:10. | |
| mariadb-conv | File | 4815712 bytes | November 28 2025 17:50:10. | |
| mariadb-convert-table-format | File | 4386 bytes | November 28 2025 17:50:11. | |
| mariadb-dump | File | 5229744 bytes | November 28 2025 17:50:10. | |
| mariadb-dumpslow | File | 8382 bytes | November 28 2025 17:50:11. | |
| mariadb-embedded | File | 25792464 bytes | November 28 2025 17:50:11. | |
| mariadb-find-rows | File | 3433 bytes | November 28 2025 17:50:11. | |
| mariadb-hotcopy | File | 35497 bytes | November 28 2025 17:50:11. | |
| mariadb-import | File | 5114744 bytes | November 28 2025 17:50:10. | |
| mariadb-plugin | File | 4794424 bytes | November 28 2025 17:50:10. | |
| mariadb-secure-installation | File | 13993 bytes | November 28 2025 17:50:11. | |
| mariadb-setpermission | File | 18128 bytes | November 28 2025 17:50:11. | |
| mariadb-show | File | 5113136 bytes | November 28 2025 17:50:10. | |
| mariadb-slap | File | 5132600 bytes | November 28 2025 17:50:10. | |
| mariadb-tzinfo-to-sql | File | 4793896 bytes | November 28 2025 17:50:11. | |
| mariadb-waitpid | File | 4781272 bytes | November 28 2025 17:50:11. | |
| mc | File | 1360320 bytes | October 18 2019 20:38:40. | |
| mcdiff | File | 1360320 bytes | October 18 2019 20:38:40. | |
| mcedit | File | 1360320 bytes | October 18 2019 20:38:40. | |
| mcookie | File | 34064 bytes | February 04 2026 20:18:19. | |
| mcview | File | 1360320 bytes | October 18 2019 20:38:40. | |
| md5sum | File | 46632 bytes | December 18 2025 13:54:40. | |
| mesg | File | 16752 bytes | February 04 2026 20:18:19. | |
| mkdir | File | 84680 bytes | December 18 2025 13:54:40. | |
| mkfifo | File | 68056 bytes | December 18 2025 13:54:40. | |
| mktemp | File | 46760 bytes | December 18 2025 13:54:40. | |
| mogrify | File | 12120 bytes | April 01 2025 13:15:58. | |
| montage | File | 12120 bytes | April 01 2025 13:15:58. | |
| more | File | 46016 bytes | February 04 2026 20:18:19. | |
| msql2mysql | File | 1446 bytes | November 28 2025 17:50:11. | |
| mv | File | 147408 bytes | December 18 2025 13:54:40. | |
| my_print_defaults | File | 4781680 bytes | November 28 2025 17:50:10. | |
| mysql | File | 5605864 bytes | November 28 2025 17:50:10. | |
| mysql_config | File | 4574 bytes | November 28 2025 17:50:41. | |
| mysql_find_rows | File | 3433 bytes | November 28 2025 17:50:11. | |
| mysql_waitpid | File | 4781272 bytes | November 28 2025 17:50:11. | |
| mysqlaccess | File | 112112 bytes | November 28 2025 17:50:11. | |
| mysqladmin | File | 5126776 bytes | November 28 2025 17:50:10. | |
| mysqlbinlog | File | 5411576 bytes | November 28 2025 17:50:10. | |
| mysqlcheck | File | 5123960 bytes | November 28 2025 17:50:10. | |
| mysqldump | File | 5229744 bytes | November 28 2025 17:50:10. | |
| mysqlimport | File | 5114744 bytes | November 28 2025 17:50:10. | |
| mysqlshow | File | 5113136 bytes | November 28 2025 17:50:10. | |
| mytop | File | 73757 bytes | November 28 2025 17:50:11. | |
| namei | File | 33896 bytes | February 04 2026 20:18:19. | |
| nano | File | 253888 bytes | September 24 2024 02:16:19. | |
| neqn | File | 908 bytes | October 13 2019 14:29:37. | |
| nice | File | 38224 bytes | December 18 2025 13:54:40. | |
| nl | File | 46648 bytes | December 18 2025 13:54:40. | |
| nm | File | 51584 bytes | December 18 2025 14:21:35. | |
| nohup | File | 38312 bytes | December 18 2025 13:54:40. | |
| nproc | File | 38304 bytes | December 18 2025 13:54:40. | |
| nroff | File | 3312 bytes | October 13 2019 14:29:39. | |
| nslookup | File | 149768 bytes | November 06 2025 07:45:52. | |
| nsupdate | File | 74808 bytes | November 06 2025 07:45:52. | |
| numfmt | File | 67216 bytes | December 18 2025 13:54:40. | |
| objcopy | File | 245832 bytes | December 18 2025 14:21:35. | |
| objdump | File | 429832 bytes | December 18 2025 14:21:35. | |
| od | File | 75576 bytes | December 18 2025 13:54:40. | |
| openssl | File | 763856 bytes | January 08 2026 13:57:28. | |
| pango-list | File | 12160 bytes | October 08 2021 15:22:06. | |
| pango-view | File | 58816 bytes | October 08 2021 15:22:06. | |
| passwd | File | 1284 bytes | April 18 2022 22:59:33. | |
| paste | File | 38280 bytes | December 18 2025 13:54:40. | |
| patch | File | 211416 bytes | June 01 2020 15:14:25. | |
| pathchk | File | 38224 bytes | December 18 2025 13:54:40. | |
| pdf2dsc | File | 698 bytes | June 03 2025 02:48:11. | |
| pdf2ps | File | 909 bytes | June 03 2025 02:48:11. | |
| perl | File | 12728 bytes | July 28 2025 08:07:20. | |
| perl5.26.3 | File | 12728 bytes | July 28 2025 08:07:20. | |
| perlbug | File | 45458 bytes | July 28 2025 08:08:32. | |
| perldoc | File | 118 bytes | October 13 2019 11:53:57. | |
| perlivp | File | 10813 bytes | July 28 2025 08:07:09. | |
| perlml | File | 7024 bytes | August 10 2022 20:54:28. | |
| perlthanks | File | 45458 bytes | July 28 2025 08:08:32. | |
| pg_dump | File | 409016 bytes | February 27 2024 08:25:00. | |
| pg_dumpall | File | 109680 bytes | February 27 2024 08:25:00. | |
| pg_restore | File | 177504 bytes | February 27 2024 08:25:00. | |
| pgrep | File | 29536 bytes | October 14 2023 20:31:02. | |
| php | File | 937 bytes | April 03 2025 11:08:35. | |
| pic | File | 300896 bytes | October 13 2019 14:29:41. | |
| piconv | File | 8271 bytes | October 13 2019 08:46:10. | |
| pinentry | File | 2404 bytes | August 12 2018 17:18:10. | |
| pinentry-curses | File | 79760 bytes | November 24 2019 17:39:34. | |
| ping | File | 67712 bytes | October 14 2023 17:19:01. | |
| pinky | File | 42456 bytes | December 18 2025 13:54:40. | |
| pip-3 | File | bytes | January 01 1970 00:00:00. | |
| pip3 | File | bytes | January 01 1970 00:00:00. | |
| pkg-config | File | 41000 bytes | October 13 2019 06:57:31. | |
| pkgconf | File | 41000 bytes | October 13 2019 06:57:31. | |
| pkill | File | 29536 bytes | October 14 2023 20:31:02. | |
| pl2pm | File | 4533 bytes | July 28 2025 08:08:16. | |
| pmap | File | 33568 bytes | October 14 2023 20:31:02. | |
| pod2html | File | 4134 bytes | July 28 2025 08:08:32. | |
| pod2man | File | 15034 bytes | October 13 2019 14:12:32. | |
| pod2text | File | 10803 bytes | October 13 2019 14:12:32. | |
| pod2usage | File | 3948 bytes | October 13 2019 11:57:18. | |
| podchecker | File | 3658 bytes | October 13 2019 11:46:35. | |
| podselect | File | 2527 bytes | October 13 2019 11:52:55. | |
| post-grohtml | File | 244456 bytes | October 13 2019 14:29:41. | |
| pr | File | 84120 bytes | December 18 2025 13:54:40. | |
| pre-grohtml | File | 133688 bytes | October 13 2019 14:29:41. | |
| precat | File | 5656 bytes | April 18 2022 15:10:50. | |
| preunzip | File | 5656 bytes | April 18 2022 15:10:50. | |
| prezip | File | 5656 bytes | April 18 2022 15:10:50. | |
| prezip-bin | File | 12264 bytes | April 18 2022 15:10:53. | |
| printenv | File | 34120 bytes | December 18 2025 13:54:40. | |
| printf | File | 54848 bytes | December 18 2025 13:54:40. | |
| prove | File | 13562 bytes | October 13 2019 12:42:34. | |
| ps | File | 137984 bytes | October 14 2023 20:31:02. | |
| ps2ascii | File | 631 bytes | June 03 2025 02:48:11. | |
| ps2epsi | File | 2752 bytes | June 03 2025 02:48:11. | |
| ps2pdf | File | 272 bytes | June 03 2025 02:48:11. | |
| ps2pdf12 | File | 215 bytes | June 03 2025 02:48:11. | |
| ps2pdf13 | File | 215 bytes | June 03 2025 02:48:11. | |
| ps2pdf14 | File | 215 bytes | June 03 2025 02:48:11. | |
| ps2pdfwr | File | 1097 bytes | June 03 2025 02:48:11. | |
| ps2ps | File | 647 bytes | June 03 2025 02:48:11. | |
| ps2ps2 | File | 669 bytes | June 03 2025 02:48:11. | |
| psql | File | 659792 bytes | February 27 2024 08:25:00. | |
| ptx | File | 79864 bytes | December 18 2025 13:54:40. | |
| pwd | File | 38320 bytes | December 18 2025 13:54:40. | |
| pwdx | File | 12984 bytes | October 14 2023 20:31:02. | |
| pydoc-3 | File | bytes | January 01 1970 00:00:00. | |
| pydoc3 | File | bytes | January 01 1970 00:00:00. | |
| python2 | File | 8032 bytes | April 10 2024 04:58:50. | |
| python2.7 | File | 8032 bytes | April 10 2024 04:58:50. | |
| python3 | File | 11872 bytes | February 05 2026 20:05:34. | |
| python3.6 | File | 11872 bytes | February 05 2026 20:05:34. | |
| python3.6m | File | 11872 bytes | February 05 2026 20:05:34. | |
| pyvenv-3 | File | bytes | January 01 1970 00:00:00. | |
| ranlib | File | 63456 bytes | December 18 2025 14:21:35. | |
| readelf | File | 639528 bytes | December 18 2025 14:21:35. | |
| readlink | File | 46984 bytes | December 18 2025 13:54:40. | |
| realpath | File | 51144 bytes | December 18 2025 13:54:40. | |
| recode | File | 48160 bytes | October 18 2019 15:18:02. | |
| reindexdb | File | 72008 bytes | February 27 2024 08:25:00. | |
| rename | File | 16896 bytes | February 04 2026 20:18:19. | |
| renew-dummy-cert | File | 725 bytes | January 08 2026 13:57:14. | |
| renice | File | 16856 bytes | February 04 2026 20:18:19. | |
| replace | File | 4763664 bytes | November 28 2025 17:50:11. | |
| reset | File | 25352 bytes | October 14 2023 18:54:49. | |
| rev | File | 12760 bytes | February 04 2026 20:18:19. | |
| rm | File | 72064 bytes | December 18 2025 13:54:40. | |
| rmdir | File | 46552 bytes | December 18 2025 13:54:40. | |
| rnano | File | 253888 bytes | September 24 2024 02:16:19. | |
| rsync | File | 522392 bytes | June 03 2025 02:02:49. | |
| ruby | File | 12128 bytes | May 14 2025 12:43:45. | |
| run-with-aspell | File | 85 bytes | April 18 2022 15:10:50. | |
| rvi | File | 1180352 bytes | October 12 2025 00:23:15. | |
| rview | File | 1180352 bytes | October 12 2025 00:23:15. | |
| rvim | File | 3067744 bytes | October 12 2025 00:23:15. | |
| scalar | File | 2290912 bytes | July 23 2025 06:59:57. | |
| scl | File | 37752 bytes | April 01 2023 16:10:31. | |
| scl_enabled | File | 258 bytes | August 25 2017 08:23:02. | |
| scl_source | File | 1863 bytes | April 01 2023 16:10:31. | |
| scp | File | 105304 bytes | December 18 2025 02:27:48. | |
| screen | File | 494040 bytes | May 05 2021 10:04:06. | |
| script | File | 37680 bytes | February 04 2026 20:18:19. | |
| sdiff | File | 107856 bytes | May 04 2020 15:15:14. | |
| sed | File | 118248 bytes | April 18 2022 21:41:04. | |
| selectorctl | File | 7812 bytes | December 15 2025 14:07:47. | |
| seq | File | 54728 bytes | December 18 2025 13:54:40. | |
| setsid | File | 16768 bytes | February 04 2026 20:18:19. | |
| setterm | File | 46208 bytes | February 04 2026 20:18:19. | |
| sftp | File | 163576 bytes | December 18 2025 02:27:48. | |
| sh | File | 1154680 bytes | August 26 2025 08:48:39. | |
| sha1sum | File | 46640 bytes | December 18 2025 13:54:40. | |
| sha224sum | File | 46672 bytes | December 18 2025 13:54:40. | |
| sha256sum | File | 46680 bytes | December 18 2025 13:54:40. | |
| sha384sum | File | 46688 bytes | December 18 2025 13:54:40. | |
| sha512sum | File | 46680 bytes | December 18 2025 13:54:40. | |
| shred | File | 63336 bytes | December 18 2025 13:54:40. | |
| shuf | File | 59488 bytes | December 18 2025 13:54:40. | |
| size | File | 34048 bytes | December 18 2025 14:21:35. | |
| skill | File | 29488 bytes | October 14 2023 20:31:02. | |
| slabtop | File | 21344 bytes | October 14 2023 20:31:02. | |
| sleep | File | 38288 bytes | December 18 2025 13:54:40. | |
| snice | File | 29488 bytes | October 14 2023 20:31:02. | |
| soelim | File | 43576 bytes | October 13 2019 14:29:41. | |
| sort | File | 126432 bytes | December 18 2025 13:54:40. | |
| spell | File | 122 bytes | April 18 2022 15:10:51. | |
| splain | File | 19150 bytes | July 28 2025 08:08:32. | |
| split | File | 59440 bytes | December 18 2025 13:54:40. | |
| sprof | File | 29360 bytes | December 08 2025 09:43:19. | |
| sqlite3 | File | 1346512 bytes | July 29 2025 01:27:56. | |
| ssh | File | 775648 bytes | December 18 2025 02:27:48. | |
| ssh-add | File | 354416 bytes | December 18 2025 02:27:48. | |
| ssh-agent | File | 333400 bytes | December 18 2025 02:27:48. | |
| ssh-copy-id | File | 10694 bytes | December 18 2025 02:27:46. | |
| ssh-keygen | File | 437424 bytes | December 18 2025 02:27:48. | |
| ssh-keyscan | File | 438800 bytes | December 18 2025 02:27:48. | |
| stat | File | 88232 bytes | December 18 2025 13:54:40. | |
| stdbuf | File | 50688 bytes | December 18 2025 13:54:40. | |
| strace | File | 2029832 bytes | January 28 2025 01:32:17. | |
| stream | File | 12112 bytes | April 01 2025 13:15:58. | |
| strings | File | 38328 bytes | December 18 2025 14:21:35. | |
| strip | File | 245856 bytes | December 18 2025 14:21:35. | |
| stty | File | 79472 bytes | December 18 2025 13:54:40. | |
| sum | File | 46624 bytes | December 18 2025 13:54:40. | |
| sync | File | 38256 bytes | December 18 2025 13:54:40. | |
| tabs | File | 16952 bytes | October 14 2023 18:54:49. | |
| tac | File | 42488 bytes | December 18 2025 13:54:40. | |
| tail | File | 75912 bytes | December 18 2025 13:54:40. | |
| tar | File | 459768 bytes | August 26 2025 08:57:37. | |
| taskset | File | 38152 bytes | February 04 2026 20:18:19. | |
| tbl | File | 158320 bytes | October 13 2019 14:29:41. | |
| tclsh | File | 9256 bytes | October 12 2019 00:25:32. | |
| tclsh8.6 | File | 9256 bytes | October 12 2019 00:25:32. | |
| tee | File | 42472 bytes | December 18 2025 13:54:40. | |
| test | File | 54848 bytes | December 18 2025 13:54:40. | |
| tic | File | 87360 bytes | October 14 2023 18:54:49. | |
| timeout | File | 42864 bytes | December 18 2025 13:54:40. | |
| tload | File | 17160 bytes | October 14 2023 20:31:02. | |
| tmpwatch | File | 36320 bytes | October 12 2019 11:32:29. | |
| toe | File | 16848 bytes | October 14 2023 18:54:49. | |
| top | File | 124616 bytes | October 14 2023 20:31:02. | |
| touch | File | 96192 bytes | December 18 2025 13:54:40. | |
| tput | File | 25392 bytes | October 14 2023 18:54:49. | |
| tr | File | 50816 bytes | December 18 2025 13:54:40. | |
| traceroute | File | 72672 bytes | March 11 2025 07:45:53. | |
| troff | File | 824344 bytes | October 13 2019 14:29:41. | |
| true | File | 34128 bytes | December 18 2025 13:54:40. | |
| truncate | File | 42352 bytes | December 18 2025 13:54:40. | |
| tset | File | 25352 bytes | October 14 2023 18:54:49. | |
| tsort | File | 42488 bytes | December 18 2025 13:54:40. | |
| tty | File | 34112 bytes | December 18 2025 13:54:40. | |
| tzselect | File | 15370 bytes | December 08 2025 09:36:35. | |
| uapi | File | 1280 bytes | January 10 2026 21:23:10. | |
| ul | File | 21080 bytes | February 04 2026 20:18:19. | |
| uname | File | 38224 bytes | December 18 2025 13:54:40. | |
| unexpand | File | 46704 bytes | December 18 2025 13:54:40. | |
| uniq | File | 50832 bytes | December 18 2025 13:54:40. | |
| unlink | File | 34144 bytes | December 18 2025 13:54:40. | |
| unversioned-python | File | bytes | January 01 1970 00:00:00. | |
| unzip | File | 206728 bytes | June 03 2025 02:10:12. | |
| unzipsfx | File | 103912 bytes | June 03 2025 02:10:12. | |
| uptime | File | 12888 bytes | October 14 2023 20:31:02. | |
| users | File | 38288 bytes | December 18 2025 13:54:40. | |
| utmpdump | File | 29352 bytes | February 04 2026 20:18:19. | |
| vacuumdb | File | 80344 bytes | February 27 2024 08:25:00. | |
| vdir | File | 143256 bytes | December 18 2025 13:54:40. | |
| vi | File | 1180352 bytes | October 12 2025 00:23:15. | |
| view | File | 1180352 bytes | October 12 2025 00:23:15. | |
| vim | File | 3067744 bytes | October 12 2025 00:23:15. | |
| vimdiff | File | 3067744 bytes | October 12 2025 00:23:15. | |
| vimtutor | File | 2121 bytes | October 12 2025 00:23:12. | |
| vmstat | File | 37672 bytes | October 14 2023 20:31:02. | |
| watch | File | 29888 bytes | October 14 2023 20:31:02. | |
| wc | File | 50832 bytes | December 18 2025 13:54:40. | |
| wget | File | 533928 bytes | August 13 2024 22:22:56. | |
| whereis | File | 29976 bytes | February 04 2026 20:18:19. | |
| which | File | 30088 bytes | August 26 2025 08:54:45. | |
| who | File | 54880 bytes | December 18 2025 13:54:40. | |
| whoami | File | 34136 bytes | December 18 2025 13:54:40. | |
| word-list-compress | File | 12280 bytes | April 18 2022 15:10:53. | |
| x86_64-redhat-linux-c++ | File | 1266616 bytes | August 26 2025 09:47:24. | |
| x86_64-redhat-linux-g++ | File | 1266616 bytes | August 26 2025 09:47:24. | |
| x86_64-redhat-linux-gcc | File | 1266576 bytes | August 26 2025 09:47:26. | |
| x86_64-redhat-linux-gcc-8 | File | 1266576 bytes | August 26 2025 09:47:26. | |
| xargs | File | 75888 bytes | December 18 2025 14:57:01. | |
| xmlcatalog | File | 20864 bytes | August 06 2025 13:59:35. | |
| xmllint | File | 75128 bytes | August 06 2025 13:59:35. | |
| xmlwf | File | 37848 bytes | November 20 2025 07:31:32. | |
| xsltproc | File | 29152 bytes | August 26 2025 08:55:17. | |
| xsubpp | File | 5080 bytes | October 13 2019 08:58:35. | |
| xxd | File | 21032 bytes | October 12 2025 00:23:15. | |
| yes | File | 34168 bytes | December 18 2025 13:54:40. | |
| zcat | File | 1983 bytes | April 27 2022 05:49:28. | |
| zcmp | File | 1677 bytes | April 27 2022 05:49:28. | |
| zdiff | File | 5879 bytes | April 27 2022 05:49:28. | |
| zegrep | File | 29 bytes | April 27 2022 05:49:28. | |
| zfgrep | File | 29 bytes | April 27 2022 05:49:28. | |
| zforce | File | 2080 bytes | April 27 2022 05:49:28. | |
| zgrep | File | 7582 bytes | April 27 2022 05:49:28. | |
| zip | File | 234496 bytes | October 11 2019 13:11:04. | |
| zipcloak | File | 105376 bytes | October 11 2019 13:11:04. | |
| zipgrep | File | 2953 bytes | October 10 2008 17:40:36. | |
| zipinfo | File | 206728 bytes | June 03 2025 02:10:12. | |
| zipnote | File | 100104 bytes | October 11 2019 13:11:04. | |
| zipsplit | File | 100104 bytes | October 11 2019 13:11:04. | |
| zless | File | 2205 bytes | April 27 2022 05:49:28. | |
| zmore | File | 1841 bytes | April 27 2022 05:49:28. | |
| znew | File | 4552 bytes | April 27 2022 05:49:28. | |
| zsoelim | File | 43576 bytes | October 13 2019 14:29:41. |
#!/usr/bin/perl
eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
if $running_under_some_shell;
BEGIN { pop @INC if $INC[-1] eq '.' }
=head1 NAME
diagnostics, splain - produce verbose warning diagnostics
=head1 SYNOPSIS
Using the C<diagnostics> pragma:
use diagnostics;
use diagnostics -verbose;
enable diagnostics;
disable diagnostics;
Using the C<splain> standalone filter program:
perl program 2>diag.out
splain [-v] [-p] diag.out
Using diagnostics to get stack traces from a misbehaving script:
perl -Mdiagnostics=-traceonly my_script.pl
=head1 DESCRIPTION
=head2 The C<diagnostics> Pragma
This module extends the terse diagnostics normally emitted by both the
perl compiler and the perl interpreter (from running perl with a -w
switch or C<use warnings>), augmenting them with the more
explicative and endearing descriptions found in L<perldiag>. Like the
other pragmata, it affects the compilation phase of your program rather
than merely the execution phase.
To use in your program as a pragma, merely invoke
use diagnostics;
at the start (or near the start) of your program. (Note
that this I<does> enable perl's B<-w> flag.) Your whole
compilation will then be subject(ed :-) to the enhanced diagnostics.
These still go out B<STDERR>.
Due to the interaction between runtime and compiletime issues,
and because it's probably not a very good idea anyway,
you may not use C<no diagnostics> to turn them off at compiletime.
However, you may control their behaviour at runtime using the
disable() and enable() methods to turn them off and on respectively.
The B<-verbose> flag first prints out the L<perldiag> introduction before
any other diagnostics. The $diagnostics::PRETTY variable can generate nicer
escape sequences for pagers.
Warnings dispatched from perl itself (or more accurately, those that match
descriptions found in L<perldiag>) are only displayed once (no duplicate
descriptions). User code generated warnings a la warn() are unaffected,
allowing duplicate user messages to be displayed.
This module also adds a stack trace to the error message when perl dies.
This is useful for pinpointing what
caused the death. The B<-traceonly> (or
just B<-t>) flag turns off the explanations of warning messages leaving just
the stack traces. So if your script is dieing, run it again with
perl -Mdiagnostics=-traceonly my_bad_script
to see the call stack at the time of death. By supplying the B<-warntrace>
(or just B<-w>) flag, any warnings emitted will also come with a stack
trace.
=head2 The I<splain> Program
While apparently a whole nuther program, I<splain> is actually nothing
more than a link to the (executable) F<diagnostics.pm> module, as well as
a link to the F<diagnostics.pod> documentation. The B<-v> flag is like
the C<use diagnostics -verbose> directive.
The B<-p> flag is like the
$diagnostics::PRETTY variable. Since you're post-processing with
I<splain>, there's no sense in being able to enable() or disable() processing.
Output from I<splain> is directed to B<STDOUT>, unlike the pragma.
=head1 EXAMPLES
The following file is certain to trigger a few errors at both
runtime and compiletime:
use diagnostics;
print NOWHERE "nothing\n";
print STDERR "\n\tThis message should be unadorned.\n";
warn "\tThis is a user warning";
print "\nDIAGNOSTIC TESTER: Please enter a <CR> here: ";
my $a, $b = scalar <STDIN>;
print "\n";
print $x/$y;
If you prefer to run your program first and look at its problem
afterwards, do this:
perl -w test.pl 2>test.out
./splain < test.out
Note that this is not in general possible in shells of more dubious heritage,
as the theoretical
(perl -w test.pl >/dev/tty) >& test.out
./splain < test.out
Because you just moved the existing B<stdout> to somewhere else.
If you don't want to modify your source code, but still have on-the-fly
warnings, do this:
exec 3>&1; perl -w test.pl 2>&1 1>&3 3>&- | splain 1>&2 3>&-
Nifty, eh?
If you want to control warnings on the fly, do something like this.
Make sure you do the C<use> first, or you won't be able to get
at the enable() or disable() methods.
use diagnostics; # checks entire compilation phase
print "\ntime for 1st bogus diags: SQUAWKINGS\n";
print BOGUS1 'nada';
print "done with 1st bogus\n";
disable diagnostics; # only turns off runtime warnings
print "\ntime for 2nd bogus: (squelched)\n";
print BOGUS2 'nada';
print "done with 2nd bogus\n";
enable diagnostics; # turns back on runtime warnings
print "\ntime for 3rd bogus: SQUAWKINGS\n";
print BOGUS3 'nada';
print "done with 3rd bogus\n";
disable diagnostics;
print "\ntime for 4th bogus: (squelched)\n";
print BOGUS4 'nada';
print "done with 4th bogus\n";
=head1 INTERNALS
Diagnostic messages derive from the F<perldiag.pod> file when available at
runtime. Otherwise, they may be embedded in the file itself when the
splain package is built. See the F<Makefile> for details.
If an extant $SIG{__WARN__} handler is discovered, it will continue
to be honored, but only after the diagnostics::splainthis() function
(the module's $SIG{__WARN__} interceptor) has had its way with your
warnings.
There is a $diagnostics::DEBUG variable you may set if you're desperately
curious what sorts of things are being intercepted.
BEGIN { $diagnostics::DEBUG = 1 }
=head1 BUGS
Not being able to say "no diagnostics" is annoying, but may not be
insurmountable.
The C<-pretty> directive is called too late to affect matters.
You have to do this instead, and I<before> you load the module.
BEGIN { $diagnostics::PRETTY = 1 }
I could start up faster by delaying compilation until it should be
needed, but this gets a "panic: top_level" when using the pragma form
in Perl 5.001e.
While it's true that this documentation is somewhat subserious, if you use
a program named I<splain>, you should expect a bit of whimsy.
=head1 AUTHOR
Tom Christiansen <F<tchrist@mox.perl.com>>, 25 June 1995.
=cut
use strict;
use 5.009001;
use Carp;
$Carp::Internal{__PACKAGE__.""}++;
our $VERSION = '1.36';
our $DEBUG;
our $VERBOSE;
our $PRETTY;
our $TRACEONLY = 0;
our $WARNTRACE = 0;
use Config;
use Text::Tabs 'expand';
my $privlib = $Config{privlibexp};
if ($^O eq 'VMS') {
require VMS::Filespec;
$privlib = VMS::Filespec::unixify($privlib);
}
my @trypod = (
"$privlib/pod/perldiag.pod",
"$privlib/pods/perldiag.pod",
);
# handy for development testing of new warnings etc
unshift @trypod, "./pod/perldiag.pod" if -e "pod/perldiag.pod";
(my $PODFILE) = ((grep { -e } @trypod), $trypod[$#trypod])[0];
$DEBUG ||= 0;
local $| = 1;
local $_;
local $.;
my $standalone;
my(%HTML_2_Troff, %HTML_2_Latin_1, %HTML_2_ASCII_7);
CONFIG: {
our $opt_p = our $opt_d = our $opt_v = our $opt_f = '';
unless (caller) {
$standalone++;
require Getopt::Std;
Getopt::Std::getopts('pdvf:')
or die "Usage: $0 [-v] [-p] [-f splainpod]";
$PODFILE = $opt_f if $opt_f;
$DEBUG = 2 if $opt_d;
$VERBOSE = $opt_v;
$PRETTY = $opt_p;
}
if (open(POD_DIAG, '<', $PODFILE)) {
warn "Happy happy podfile from real $PODFILE\n" if $DEBUG;
last CONFIG;
}
if (caller) {
INCPATH: {
for my $file ( (map { "$_/".__PACKAGE__.".pm" } @INC), $0) {
warn "Checking $file\n" if $DEBUG;
if (open(POD_DIAG, '<', $file)) {
while (<POD_DIAG>) {
next unless
/^__END__\s*# wish diag dbase were more accessible/;
print STDERR "podfile is $file\n" if $DEBUG;
last INCPATH;
}
}
}
}
} else {
print STDERR "podfile is <DATA>\n" if $DEBUG;
*POD_DIAG = *main::DATA;
}
}
if (eof(POD_DIAG)) {
die "couldn't find diagnostic data in $PODFILE @INC $0";
}
%HTML_2_Troff = (
'amp' => '&', # ampersand
'lt' => '<', # left chevron, less-than
'gt' => '>', # right chevron, greater-than
'quot' => '"', # double quote
"Aacute" => "A\\*'", # capital A, acute accent
# etc
);
%HTML_2_Latin_1 = (
'amp' => '&', # ampersand
'lt' => '<', # left chevron, less-than
'gt' => '>', # right chevron, greater-than
'quot' => '"', # double quote
"Aacute" => "\xC1" # capital A, acute accent
# etc
);
%HTML_2_ASCII_7 = (
'amp' => '&', # ampersand
'lt' => '<', # left chevron, less-than
'gt' => '>', # right chevron, greater-than
'quot' => '"', # double quote
"Aacute" => "A" # capital A, acute accent
# etc
);
our %HTML_Escapes;
*HTML_Escapes = do {
if ($standalone) {
$PRETTY ? \%HTML_2_Latin_1 : \%HTML_2_ASCII_7;
} else {
\%HTML_2_Latin_1;
}
};
*THITHER = $standalone ? *STDOUT : *STDERR;
my %transfmt = ();
my $transmo = <<EOFUNC;
sub transmo {
#local \$^W = 0; # recursive warnings we do NOT need!
EOFUNC
my %msg;
my $over_level = 0; # We look only at =item lines at the first =over level
{
print STDERR "FINISHING COMPILATION for $_\n" if $DEBUG;
local $/ = '';
local $_;
my $header;
my @headers;
my $for_item;
my $seen_body;
while (<POD_DIAG>) {
sub _split_pod_link {
$_[0] =~ m'(?:([^|]*)\|)?([^/]*)(?:/("?)(.*)\3)?'s;
($1,$2,$4);
}
unescape();
if ($PRETTY) {
sub noop { return $_[0] } # spensive for a noop
sub bold { my $str =$_[0]; $str =~ s/(.)/$1\b$1/g; return $str; }
sub italic { my $str = $_[0]; $str =~ s/(.)/_\b$1/g; return $str; }
s/C<<< (.*?) >>>|C<< (.*?) >>|[BC]<(.*?)>/bold($+)/ges;
s/[IF]<(.*?)>/italic($1)/ges;
s/L<(.*?)>/
my($text,$page,$sect) = _split_pod_link($1);
defined $text
? $text
: defined $sect
? italic($sect) . ' in ' . italic($page)
: italic($page)
/ges;
s/S<(.*?)>/
$1
/ges;
} else {
s/C<<< (.*?) >>>|C<< (.*?) >>|[BC]<(.*?)>/$+/gs;
s/[IF]<(.*?)>/$1/gs;
s/L<(.*?)>/
my($text,$page,$sect) = _split_pod_link($1);
defined $text
? $text
: defined $sect
? qq '"$sect" in $page'
: $page
/ges;
s/S<(.*?)>/
$1
/ges;
}
unless (/^=/) {
if (defined $header) {
if ( $header eq 'DESCRIPTION' &&
( /Optional warnings are enabled/
|| /Some of these messages are generic./
) )
{
next;
}
$_ = expand $_;
s/^/ /gm;
$msg{$header} .= $_;
for my $h(@headers) { $msg{$h} .= $_ }
++$seen_body;
undef $for_item;
}
next;
}
# If we have not come across the body of the description yet, then
# the previous header needs to share the same description.
if ($seen_body) {
@headers = ();
}
else {
push @headers, $header if defined $header;
}
if ( ! s/=item (.*?)\s*\z//s || $over_level != 1) {
if ( s/=head1\sDESCRIPTION//) {
$msg{$header = 'DESCRIPTION'} = '';
undef $for_item;
}
elsif( s/^=for\s+diagnostics\s*\n(.*?)\s*\z// ) {
$for_item = $1;
}
elsif( /^=over\b/ ) {
$over_level++;
}
elsif( /^=back\b/ ) { # Stop processing body here
$over_level--;
if ($over_level == 0) {
undef $header;
undef $for_item;
$seen_body = 0;
next;
}
}
next;
}
if( $for_item ) { $header = $for_item; undef $for_item }
else {
$header = $1;
$header =~ s/\n/ /gs; # Allow multi-line headers
}
# strip formatting directives from =item line
$header =~ s/[A-Z]<(.*?)>/$1/g;
# Since we strip "(\.\s*)\n" when we search a warning, strip it here as well
$header =~ s/(\.\s*)?$//;
my @toks = split( /(%l?[dxX]|%[ucp]|%(?:\.\d+)?[fs])/, $header );
if (@toks > 1) {
my $conlen = 0;
for my $i (0..$#toks){
if( $i % 2 ){
if( $toks[$i] eq '%c' ){
$toks[$i] = '.';
} elsif( $toks[$i] =~ /^%(?:d|u)$/ ){
$toks[$i] = '\d+';
} elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){
$toks[$i] = $i == $#toks ? '.*' : '.*?';
} elsif( $toks[$i] =~ '%.(\d+)s' ){
$toks[$i] = ".{$1}";
} elsif( $toks[$i] =~ '^%l*([pxX])$' ){
$toks[$i] = $1 eq 'X' ? '[\dA-F]+' : '[\da-f]+';
}
} elsif( length( $toks[$i] ) ){
$toks[$i] = quotemeta $toks[$i];
$conlen += length( $toks[$i] );
}
}
my $lhs = join( '', @toks );
$lhs =~ s/(\\\s)+/\\s+/g; # Replace lit space with multi-space match
$transfmt{$header}{pat} =
" s^\\s*$lhs\\s*\Q$header\Es\n\t&& return 1;\n";
$transfmt{$header}{len} = $conlen;
} else {
my $lhs = "\Q$header\E";
$lhs =~ s/(\\\s)+/\\s+/g; # Replace lit space with multi-space match
$transfmt{$header}{pat} =
" s^\\s*$lhs\\s*\Q$header\E\n\t && return 1;\n";
$transfmt{$header}{len} = length( $header );
}
print STDERR __PACKAGE__.": Duplicate entry: \"$header\"\n"
if $msg{$header};
$msg{$header} = '';
$seen_body = 0;
}
close POD_DIAG unless *main::DATA eq *POD_DIAG;
die "No diagnostics?" unless %msg;
# Apply patterns in order of decreasing sum of lengths of fixed parts
# Seems the best way of hitting the right one.
for my $hdr ( sort { $transfmt{$b}{len} <=> $transfmt{$a}{len} }
keys %transfmt ){
$transmo .= $transfmt{$hdr}{pat};
}
$transmo .= " return 0;\n}\n";
print STDERR $transmo if $DEBUG;
eval $transmo;
die $@ if $@;
}
if ($standalone) {
if (!@ARGV and -t STDIN) { print STDERR "$0: Reading from STDIN\n" }
while (defined (my $error = <>)) {
splainthis($error) || print THITHER $error;
}
exit;
}
my $olddie;
my $oldwarn;
sub import {
shift;
$^W = 1; # yup, clobbered the global variable;
# tough, if you want diags, you want diags.
return if defined $SIG{__WARN__} && ($SIG{__WARN__} eq \&warn_trap);
for (@_) {
/^-d(ebug)?$/ && do {
$DEBUG++;
next;
};
/^-v(erbose)?$/ && do {
$VERBOSE++;
next;
};
/^-p(retty)?$/ && do {
print STDERR "$0: I'm afraid it's too late for prettiness.\n";
$PRETTY++;
next;
};
# matches trace and traceonly for legacy doc mixup reasons
/^-t(race(only)?)?$/ && do {
$TRACEONLY++;
next;
};
/^-w(arntrace)?$/ && do {
$WARNTRACE++;
next;
};
warn "Unknown flag: $_";
}
$oldwarn = $SIG{__WARN__};
$olddie = $SIG{__DIE__};
$SIG{__WARN__} = \&warn_trap;
$SIG{__DIE__} = \&death_trap;
}
sub enable { &import }
sub disable {
shift;
return unless $SIG{__WARN__} eq \&warn_trap;
$SIG{__WARN__} = $oldwarn || '';
$SIG{__DIE__} = $olddie || '';
}
sub warn_trap {
my $warning = $_[0];
if (caller eq __PACKAGE__ or !splainthis($warning)) {
if ($WARNTRACE) {
print STDERR Carp::longmess($warning);
} else {
print STDERR $warning;
}
}
goto &$oldwarn if defined $oldwarn and $oldwarn and $oldwarn ne \&warn_trap;
};
sub death_trap {
my $exception = $_[0];
# See if we are coming from anywhere within an eval. If so we don't
# want to explain the exception because it's going to get caught.
my $in_eval = 0;
my $i = 0;
while (my $caller = (caller($i++))[3]) {
if ($caller eq '(eval)') {
$in_eval = 1;
last;
}
}
splainthis($exception) unless $in_eval;
if (caller eq __PACKAGE__) {
print STDERR "INTERNAL EXCEPTION: $exception";
}
&$olddie if defined $olddie and $olddie and $olddie ne \&death_trap;
return if $in_eval;
# We don't want to unset these if we're coming from an eval because
# then we've turned off diagnostics.
# Switch off our die/warn handlers so we don't wind up in our own
# traps.
$SIG{__DIE__} = $SIG{__WARN__} = '';
$exception =~ s/\n(?=.)/\n\t/gas;
die Carp::longmess("__diagnostics__")
=~ s/^__diagnostics__.*?line \d+\.?\n/
"Uncaught exception from user code:\n\t$exception"
/re;
# up we go; where we stop, nobody knows, but i think we die now
# but i'm deeply afraid of the &$olddie guy reraising and us getting
# into an indirect recursion loop
};
my %exact_duplicate;
my %old_diag;
my $count;
my $wantspace;
sub splainthis {
return 0 if $TRACEONLY;
for (my $tmp = shift) {
local $\;
local $!;
### &finish_compilation unless %msg;
s/(\.\s*)?\n+$//;
my $orig = $_;
# return unless defined;
# get rid of the where-are-we-in-input part
s/, <.*?> (?:line|chunk).*$//;
# Discard 1st " at <file> line <no>" and all text beyond
# but be aware of messages containing " at this-or-that"
my $real = 0;
my @secs = split( / at / );
return unless @secs;
$_ = $secs[0];
for my $i ( 1..$#secs ){
if( $secs[$i] =~ /.+? (?:line|chunk) \d+/ ){
$real = 1;
last;
} else {
$_ .= ' at ' . $secs[$i];
}
}
# remove parenthesis occurring at the end of some messages
s/^\((.*)\)$/$1/;
if ($exact_duplicate{$orig}++) {
return &transmo;
} else {
return 0 unless &transmo;
}
my $short = shorten($orig);
if ($old_diag{$_}) {
autodescribe();
print THITHER "$short (#$old_diag{$_})\n";
$wantspace = 1;
} elsif (!$msg{$_} && $orig =~ /\n./s) {
# A multiline message, like "Attempt to reload /
# Compilation failed"
my $found;
for (split /^/, $orig) {
splainthis($_) and $found = 1;
}
return $found;
} else {
autodescribe();
$old_diag{$_} = ++$count;
print THITHER "\n" if $wantspace;
$wantspace = 0;
print THITHER "$short (#$old_diag{$_})\n";
if ($msg{$_}) {
print THITHER $msg{$_};
} else {
if (0 and $standalone) {
print THITHER " **** Error #$old_diag{$_} ",
($real ? "is" : "appears to be"),
" an unknown diagnostic message.\n\n";
}
return 0;
}
}
return 1;
}
}
sub autodescribe {
if ($VERBOSE and not $count) {
print THITHER &{$PRETTY ? \&bold : \&noop}("DESCRIPTION OF DIAGNOSTICS"),
"\n$msg{DESCRIPTION}\n";
}
}
sub unescape {
s {
E<
( [A-Za-z]+ )
>
} {
do {
exists $HTML_Escapes{$1}
? do { $HTML_Escapes{$1} }
: do {
warn "Unknown escape: E<$1> in $_";
"E<$1>";
}
}
}egx;
}
sub shorten {
my $line = $_[0];
if (length($line) > 79 and index($line, "\n") == -1) {
my $space_place = rindex($line, ' ', 79);
if ($space_place != -1) {
substr($line, $space_place, 1) = "\n\t";
}
}
return $line;
}
1 unless $standalone; # or it'll complain about itself
__END__ # wish diag dbase were more accessible
SILENT KILLER Tool