| | | | | | | | | | | | | | | | | | | | | |
<?xml version="1.0" standalone="no" encoding="windows-1252"?> |
<!-- Generated by ThunderDome XBRL - 04:24PM UTC 2022-09-06 --> |
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:country="http://xbrl.sec.gov/country/2022" xmlns:currency="http://xbrl.sec.gov/currency/2022" xmlns:dei="http://xbrl.sec.gov/dei/2022" xmlns:dtr-types="http://www.xbrl.org/dtr/type/2020-01-21" xmlns:exch="http://xbrl.sec.gov/exch/2022" xmlns:link="http://www.xbrl.org/2003/linkbase" xmlns:naics="http://xbrl.sec.gov/naics/2022" xmlns:ppih="http://investors.permapipe.com/20220731" xmlns:sic="http://xbrl.sec.gov/sic/2022" xmlns:srt="http://fasb.org/srt/2022" xmlns:srt-types="http://fasb.org/srt-types/2022" xmlns:stpr="http://xbrl.sec.gov/stpr/2022" xmlns:us-gaap="http://fasb.org/us-gaap/2022" xmlns:us-types="http://fasb.org/us-types/2022" xmlns:xbrldt="http://xbrl.org/2005/xbrldt" xmlns:xbrli="http://www.xbrl.org/2003/instance" xmlns:xlink="http://www.w3.org/1999/xlink" attributeFormDefault="unqualified" elementFormDefault="qualified" targetNamespace="http://investors.permapipe.com/20220731"> |
| <xsd:import namespace="http://www.xbrl.org/2003/instance" schemaLocation="http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/naics/2022" schemaLocation="https://xbrl.sec.gov/naics/2022/naics-2022.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/country/2022" schemaLocation="https://xbrl.sec.gov/country/2022/country-2022.xsd"/> |
| <xsd:import namespace="http://fasb.org/srt/2022" schemaLocation="https://xbrl.fasb.org/srt/2022/elts/srt-2022.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/dei/2022" schemaLocation="https://xbrl.sec.gov/dei/2022/dei-2022.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/sic/2022" schemaLocation="https://xbrl.sec.gov/sic/2022/sic-2022.xsd"/> |
| <xsd:import namespace="http://fasb.org/us-types/2022" schemaLocation="https://xbrl.fasb.org/us-gaap/2022/elts/us-types-2022.xsd"/> |
| <xsd:import namespace="http://xbrl.org/2005/xbrldt" schemaLocation="http://www.xbrl.org/2005/xbrldt-2005.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/stpr/2022" schemaLocation="https://xbrl.sec.gov/stpr/2022/stpr-2022.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/exch/2022" schemaLocation="https://xbrl.sec.gov/exch/2022/exch-2022.xsd"/> |
| <xsd:import namespace="http://xbrl.sec.gov/currency/2022" schemaLocation="https://xbrl.sec.gov/currency/2022/currency-2022.xsd"/> |
| <xsd:import namespace="http://www.xbrl.org/dtr/type/2020-01-21" schemaLocation="https://www.xbrl.org/dtr/type/2020-01-21/types.xsd"/> |
| <xsd:import namespace="http://fasb.org/srt-types/2022" schemaLocation="https://xbrl.fasb.org/srt/2022/elts/srt-types-2022.xsd"/> |
| <xsd:import namespace="http://fasb.org/us-gaap/2022" schemaLocation="https://xbrl.fasb.org/us-gaap/2022/elts/us-gaap-2022.xsd"/> |
| <xsd:import namespace="http://www.xbrl.org/2009/role/negated" schemaLocation="http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd"/> |
| <xsd:annotation> |
| | <xsd:appinfo> |
| | | <link:linkbaseRef xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="ppih-20220731_lab.xml" xlink:role="http://www.xbrl.org/2003/role/labelLinkbaseRef" xlink:type="simple"/> |
| | | <link:linkbaseRef xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="ppih-20220731_cal.xml" xlink:role="http://www.xbrl.org/2003/role/calculationLinkbaseRef" xlink:type="simple"/> |
| | | <link:linkbaseRef xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="ppih-20220731_def.xml" xlink:role="http://www.xbrl.org/2003/role/definitionLinkbaseRef" xlink:type="simple"/> |
| | | <link:linkbaseRef xlink:arcrole="http://www.w3.org/1999/xlink/properties/linkbase" xlink:href="ppih-20220731_pre.xml" xlink:role="http://www.xbrl.org/2003/role/presentationLinkbaseRef" xlink:type="simple"/> |
| | | <link:roleType id="statement-document-and-entity-information" roleURI="http://investors.permapipe.com/20220731/role/statement-document-and-entity-information"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 000 - Document - Document And Entity Information </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-consolidated-statements-of-operations-unaudited" roleURI="http://investors.permapipe.com/20220731/role/statement-consolidated-statements-of-operations-unaudited"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 001 - Statement - Consolidated Statements of Operations (Unaudited) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-consolidated-statements-of-comprehensive-income-loss-unaudited" roleURI="http://investors.permapipe.com/20220731/role/statement-consolidated-statements-of-comprehensive-income-loss-unaudited"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 002 - Statement - Consolidated Statements of Comprehensive Income / (Loss) (Unaudited) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-consolidated-balance-sheets-current-period-unaudited" roleURI="http://investors.permapipe.com/20220731/role/statement-consolidated-balance-sheets-current-period-unaudited"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 003 - Statement - Consolidated Balance Sheets (Current Period Unaudited) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-consolidated-balance-sheets-current-period-unaudited-parentheticals" roleURI="http://investors.permapipe.com/20220731/role/statement-consolidated-balance-sheets-current-period-unaudited-parentheticals"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 004 - Statement - Consolidated Balance Sheets (Current Period Unaudited) (Parentheticals) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-consolidated-statements-of-stockholders-equity-unaudited" roleURI="http://investors.permapipe.com/20220731/role/statement-consolidated-statements-of-stockholders-equity-unaudited"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 005 - Statement - Consolidated Statements of Stockholders' Equity (Unaudited) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-consolidated-statements-of-cash-flows-unaudited" roleURI="http://investors.permapipe.com/20220731/role/statement-consolidated-statements-of-cash-flows-unaudited"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 006 - Statement - Consolidated Statements of Cash Flows (Unaudited) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-1-basis-of-presentation" roleURI="http://investors.permapipe.com/20220731/role/statement-note-1-basis-of-presentation"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 007 - Disclosure - Note 1 - Basis of Presentation </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-2-business-segment-reporting" roleURI="http://investors.permapipe.com/20220731/role/statement-note-2-business-segment-reporting"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 008 - Disclosure - Note 2 - Business Segment Reporting </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-3-accounts-receivable" roleURI="http://investors.permapipe.com/20220731/role/statement-note-3-accounts-receivable"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 009 - Disclosure - Note 3 - Accounts Receivable </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-4-revenue-recognition" roleURI="http://investors.permapipe.com/20220731/role/statement-note-4-revenue-recognition"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 010 - Disclosure - Note 4 - Revenue Recognition </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-5-income-taxes" roleURI="http://investors.permapipe.com/20220731/role/statement-note-5-income-taxes"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 011 - Disclosure - Note 5 - Income Taxes </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-6-impairment-of-longlived-assets" roleURI="http://investors.permapipe.com/20220731/role/statement-note-6-impairment-of-longlived-assets"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 012 - Disclosure - Note 6 - Impairment of Long-lived Assets </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-7-stockbased-compensation" roleURI="http://investors.permapipe.com/20220731/role/statement-note-7-stockbased-compensation"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 013 - Disclosure - Note 7 - Stock-based Compensation </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-8-earnings-per-share" roleURI="http://investors.permapipe.com/20220731/role/statement-note-8-earnings-per-share"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 014 - Disclosure - Note 8 - Earnings Per Share </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-9-debt" roleURI="http://investors.permapipe.com/20220731/role/statement-note-9-debt"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 015 - Disclosure - Note 9 - Debt </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 016 - Disclosure - Note 10 - Leases </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-11-restricted-cash" roleURI="http://investors.permapipe.com/20220731/role/statement-note-11-restricted-cash"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 017 - Disclosure - Note 11 - Restricted Cash </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-12-fair-value-" roleURI="http://investors.permapipe.com/20220731/role/statement-note-12-fair-value-"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 018 - Disclosure - Note 12 - Fair Value </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-13-recent-accounting-pronouncements-" roleURI="http://investors.permapipe.com/20220731/role/statement-note-13-recent-accounting-pronouncements-"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 019 - Disclosure - Note 13 - Recent Accounting Pronouncements </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-14-treasury-stock" roleURI="http://investors.permapipe.com/20220731/role/statement-note-14-treasury-stock"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 020 - Disclosure - Note 14 - Treasury Stock </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-significant-accounting-policies-policies" roleURI="http://investors.permapipe.com/20220731/role/statement-significant-accounting-policies-policies"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 021 - Disclosure - Significant Accounting Policies (Policies) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-4-revenue-recognition-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-4-revenue-recognition-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 022 - Disclosure - Note 4 - Revenue Recognition (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-6-impairment-of-longlived-assets-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-6-impairment-of-longlived-assets-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 023 - Disclosure - Note 6 - Impairment of Long-lived Assets (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-7-stockbased-compensation-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-7-stockbased-compensation-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 024 - Disclosure - Note 7 - Stock-based Compensation (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-8-earnings-per-share-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-8-earnings-per-share-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 025 - Disclosure - Note 8 - Earnings Per Share (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 026 - Disclosure - Note 10 - Leases (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-11-restricted-cash-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-11-restricted-cash-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 027 - Disclosure - Note 11 - Restricted Cash (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-14-treasury-stock-tables" roleURI="http://investors.permapipe.com/20220731/role/statement-note-14-treasury-stock-tables"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 028 - Disclosure - Note 14 - Treasury Stock (Tables) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-2-business-segment-reporting-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-2-business-segment-reporting-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 029 - Disclosure - Note 2 - Business Segment Reporting (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-3-accounts-receivable-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-3-accounts-receivable-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 030 - Disclosure - Note 3 - Accounts Receivable (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-4-revenue-recognition-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-4-revenue-recognition-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 031 - Disclosure - Note 4 - Revenue Recognition (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-4-revenue-recognition-revenues-by-revenue-class-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-4-revenue-recognition-revenues-by-revenue-class-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 032 - Disclosure - Note 4 - Revenue Recognition - Revenues by Revenue Class (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-4-revenue-recognition-reconciliation-of-the-cost-in-excess-of-billings-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-4-revenue-recognition-reconciliation-of-the-cost-in-excess-of-billings-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 033 - Disclosure - Note 4 - Revenue Recognition - Reconciliation of the Cost in Excess of Billings (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-5-income-taxes-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-5-income-taxes-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 034 - Disclosure - Note 5 - Income Taxes (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-6-impairment-of-longlived-assets-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-6-impairment-of-longlived-assets-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 035 - Disclosure - Note 6 - Impairment of Long-lived Assets (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-6-impairment-of-longlived-assets-goodwill-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-6-impairment-of-longlived-assets-goodwill-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 036 - Disclosure - Note 6 - Impairment of Long-lived Assets - Goodwill (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-7-stockbased-compensation-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-7-stockbased-compensation-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 037 - Disclosure - Note 7 - Stock-based Compensation (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-7-stockbased-compensation-stockbased-compensation-expense-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-7-stockbased-compensation-stockbased-compensation-expense-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 038 - Disclosure - Note 7 - Stock-based Compensation - Stock-based Compensation Expense (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-7-stockbased-compensation-stock-option-activity-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-7-stockbased-compensation-stock-option-activity-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 039 - Disclosure - Note 7 - Stock-based Compensation - Stock Option Activity (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-7-stockbased-compensation-restricted-stock-activity-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-7-stockbased-compensation-restricted-stock-activity-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 040 - Disclosure - Note 7 - Stock-based Compensation - Restricted Stock Activity (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-8-earnings-per-share-summary-of-earnings-per-share-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-8-earnings-per-share-summary-of-earnings-per-share-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 041 - Disclosure - Note 8 - Earnings Per Share - Summary of Earnings Per Share (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-9-debt-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-9-debt-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 042 - Disclosure - Note 9 - Debt (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 043 - Disclosure - Note 10 - Leases (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-supplemental-balance-sheet-information-related-to-leases-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-supplemental-balance-sheet-information-related-to-leases-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 044 - Disclosure - Note 10 - Leases - Supplemental Balance Sheet Information Related to Leases (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-lease-costs-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-lease-costs-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 045 - Disclosure - Note 10 - Leases - Lease Costs (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-supplemental-cash-flow-information-related-to-leases-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-supplemental-cash-flow-information-related-to-leases-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 046 - Disclosure - Note 10 - Leases - Supplemental Cash Flow Information Related to Leases (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-weightedaverage-lease-terms-and-discount-rates-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-weightedaverage-lease-terms-and-discount-rates-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 047 - Disclosure - Note 10 - Leases - Weighted-average Lease Terms and Discount Rates (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-10-leases-maturities-of-lease-liabilities-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-10-leases-maturities-of-lease-liabilities-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 048 - Disclosure - Note 10 - Leases - Maturities of Lease Liabilities (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-11-restricted-cash-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-11-restricted-cash-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 049 - Disclosure - Note 11 - Restricted Cash (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-11-restricted-cash-summary-of-cash-cash-equivalents-and-restricted-cash-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-11-restricted-cash-summary-of-cash-cash-equivalents-and-restricted-cash-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 050 - Disclosure - Note 11 - Restricted Cash - Summary of Cash, Cash Equivalents and Restricted Cash (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-14-treasury-stock-details-textual" roleURI="http://investors.permapipe.com/20220731/role/statement-note-14-treasury-stock-details-textual"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 051 - Disclosure - Note 14 - Treasury Stock (Details Textual) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | <link:roleType id="statement-note-14-treasury-stock-repurchases-of-common-stock-details" roleURI="http://investors.permapipe.com/20220731/role/statement-note-14-treasury-stock-repurchases-of-common-stock-details"> |
| <link:definition xmlns="http://www.xbrl.org/2003/linkbase"> 052 - Disclosure - Note 14 - Treasury Stock - Repurchases of Common Stock (Details) </link:definition> |
| <link:usedOn> link:calculationLink </link:usedOn> |
| <link:usedOn> link:definitionLink </link:usedOn> |
| <link:usedOn> link:presentationLink </link:usedOn> |
| </link:roleType> |
| | | </xsd:appinfo> |
| | </xsd:annotation> |
| <xsd:element abstract="true" id="ppih_AbuDhabiLandLeaseMember" name="AbuDhabiLandLeaseMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_AccountsReceivableOutstandingForSeveralYears" name="AccountsReceivableOutstandingForSeveralYears" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_AllowanceForDoubtfulAccountsReceivableOutstandingForSeveralYears" name="AllowanceForDoubtfulAccountsReceivableOutstandingForSeveralYears" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_BillingsToDate" name="BillingsToDate" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element abstract="true" id="ppih_CanadianMortgageNoteMember" name="CanadianMortgageNoteMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_CommonStockIssuedUnderStockPlansNetOfSharesUsedForTaxWithholding" name="CommonStockIssuedUnderStockPlansNetOfSharesUsedForTaxWithholding" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_CostsInExcessOfBillingsNet" name="CostsInExcessOfBillingsNet" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_CostsIncurredForUncompletedContractsAnticipatedCollectionPeriod" name="CostsIncurredForUncompletedContractsAnticipatedCollectionPeriod" nillable="true" substitutionGroup="xbrli:item" type="xbrli:durationItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_CostsIncurredOnUncompletedContracts" name="CostsIncurredOnUncompletedContracts" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_CustomerDepositsCurrent1" name="CustomerDepositsCurrent1" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_DecreaseInOperatingLeaseExpense" name="DecreaseInOperatingLeaseExpense" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_DecreaseInOperatingLeaseLiabilityCurrent" name="DecreaseInOperatingLeaseLiabilityCurrent" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_DecreaseInOperatingLeaseLiabilityNoncurrent" name="DecreaseInOperatingLeaseLiabilityNoncurrent" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_DecreaseInOperatingLeaseRightofuseAsset" name="DecreaseInOperatingLeaseRightofuseAsset" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element abstract="true" id="ppih_DocumentAndEntityInformation" name="DocumentAndEntityInformation" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_EIBORMember" name="EIBORMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_EarnedRevenue" name="EarnedRevenue" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_EstimatedEarnings" name="EstimatedEarnings" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_ExpenseRelatedToEncashment" name="ExpenseRelatedToEncashment" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_FinanceAndOperatingLeaseLiabilityMaturityTableTextBlock" name="FinanceAndOperatingLeaseLiabilityMaturityTableTextBlock" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_FinanceLeaseObligationsMember" name="FinanceLeaseObligationsMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_FinanceLeasePrincipalPaymentsAndInterestPaymentOnLiability" name="FinanceLeasePrincipalPaymentsAndInterestPaymentOnLiability" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_FinanceLeasesAssetsMember" name="FinanceLeasesAssetsMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_FinanceVehicleEquipmentOneMember" name="FinanceVehicleEquipmentOneMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_FixedAssetsAcquiredUnderCapitalLeasesNonCash" name="FixedAssetsAcquiredUnderCapitalLeasesNonCash" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_ForeignRevolvingLinesMember" name="ForeignRevolvingLinesMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_IncreaseDecreaseInContractWithCustomerAssetAndLiability" name="IncreaseDecreaseInContractWithCustomerAssetAndLiability" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_IncreaseDecreaseInCustomerDeposits1" name="IncreaseDecreaseInCustomerDeposits1" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_InterestRateForFinanceLease" name="InterestRateForFinanceLease" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:percentItemType" xbrli:periodType="instant"/> |
| <xsd:element abstract="true" id="ppih_LandAndBuildingsInLebanonTennesseeMember" name="LandAndBuildingsInLebanonTennesseeMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_LesseeFinanceLeaseAnnualRentIncreasePercentage" name="LesseeFinanceLeaseAnnualRentIncreasePercentage" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:percentItemType" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LesseeFinanceLeaseNumberOfOptionsToExtend" name="LesseeFinanceLeaseNumberOfOptionsToExtend" nillable="true" substitutionGroup="xbrli:item" type="xbrli:integerItemType" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LesseeOperatingAndFinanceLeasesTextBlock" name="LesseeOperatingAndFinanceLeasesTextBlock" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_LesseeOperatingLeaseAnnualPayment" name="LesseeOperatingLeaseAnnualPayment" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_LineOfCreditFacilityCapitalExpendituresRestrictions" name="LineOfCreditFacilityCapitalExpendituresRestrictions" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LineOfCreditFacilityCommonStockRepurchaseRestrictions" name="LineOfCreditFacilityCommonStockRepurchaseRestrictions" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LineOfCreditFacilityCovenantTermsEBITDARatioMinimumUndrawnAvailability" name="LineOfCreditFacilityCovenantTermsEBITDARatioMinimumUndrawnAvailability" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LineOfCreditFacilityCovenantTermsEBITDARatioMinimumUndrawnAvailabilityForFiveConsecutiveDays" name="LineOfCreditFacilityCovenantTermsEBITDARatioMinimumUndrawnAvailabilityForFiveConsecutiveDays" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LineOfCreditFacilityDefaultAdditionalInterestRate" name="LineOfCreditFacilityDefaultAdditionalInterestRate" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:percentItemType" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LineOfCreditFacilityFixedChargeCoverageRatioRequired" name="LineOfCreditFacilityFixedChargeCoverageRatioRequired" nillable="true" substitutionGroup="xbrli:item" type="xbrli:pureItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_LineOfCreditFacilityGuaranteedAmount" name="LineOfCreditFacilityGuaranteedAmount" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_LongtermDebtCurrentMaturitiesExcludingNorthAmericanRevolvingLine" name="LongtermDebtCurrentMaturitiesExcludingNorthAmericanRevolvingLine" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element abstract="true" id="ppih_MortgageNoteSecuredByTennesseeManufacturingFacilityMember" name="MortgageNoteSecuredByTennesseeManufacturingFacilityMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_NorthAmericanLoanPartiesMember" name="NorthAmericanLoanPartiesMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_NoteToFinancialStatementDetailsTextual" name="NoteToFinancialStatementDetailsTextual" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_NotesToFinancialStatements" name="NotesToFinancialStatements" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_NotesToFinancialStatementsAbstract" name="NotesToFinancialStatementsAbstract" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_NumberOfMajorCustomers" name="NumberOfMajorCustomers" nillable="true" substitutionGroup="xbrli:item" type="xbrli:integerItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_OneCustomerMember" name="OneCustomerMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_OutsideCommissionsPayableCurrent" name="OutsideCommissionsPayableCurrent" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_PercentOfRevenueFromContractWithCustomerIncludingAssessedTax" name="PercentOfRevenueFromContractWithCustomerIncludingAssessedTax" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:percentItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_ProceedsFromPaymentsForStockOptionsExercisedAndTaxesRelatedToRestrictedSharesVested" name="ProceedsFromPaymentsForStockOptionsExercisedAndTaxesRelatedToRestrictedSharesVested" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_PubliclyAnnouncedShareRepurchaseProgramMember" name="PubliclyAnnouncedShareRepurchaseProgramMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_RetentionReceivable" name="RetentionReceivable" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_RetentionReceivableSettlementAmount" name="RetentionReceivableSettlementAmount" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="debit" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedByEgyptSubsidiaries2Member" name="RevolvingCreditLinesUsedByEgyptSubsidiaries2Member" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedByEgyptSubsidiariesMember" name="RevolvingCreditLinesUsedByEgyptSubsidiariesMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedByMiddleEasternSubsidiaries1Member" name="RevolvingCreditLinesUsedByMiddleEasternSubsidiaries1Member" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedByMiddleEasternSubsidiaries2Member" name="RevolvingCreditLinesUsedByMiddleEasternSubsidiaries2Member" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedByMiddleEasternSubsidiaries3Member" name="RevolvingCreditLinesUsedByMiddleEasternSubsidiaries3Member" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedByMiddleEasternSubsidiaries4Member" name="RevolvingCreditLinesUsedByMiddleEasternSubsidiaries4Member" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingCreditLinesUsedBySaudiArabianSubsidiaryMember" name="RevolvingCreditLinesUsedBySaudiArabianSubsidiaryMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_RevolvingLinesNorthAmericaMember" name="RevolvingLinesNorthAmericaMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_SIBORMember" name="SIBORMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_SharebasedCompensationArrangementBySharebasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresOrRetirementsForTaxesWeightedAverageGrantDateFairValue" name="SharebasedCompensationArrangementBySharebasedPaymentAwardEquityInstrumentsOtherThanOptionsForfeituresOrRetirementsForTaxesWeightedAverageGrantDateFairValue" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:perShareItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_SpecialtyPipingSystemsAndCoatingMember" name="SpecialtyPipingSystemsAndCoatingMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_StockIssuedDuringPeriodSharesRestrictedStockAwardForfeitedOrRetiredForTaxes" name="StockIssuedDuringPeriodSharesRestrictedStockAwardForfeitedOrRetiredForTaxes" nillable="true" substitutionGroup="xbrli:item" type="xbrli:sharesItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_StockRepurchaseProgramAuthorizedRepurchaseAmountUsed" name="StockRepurchaseProgramAuthorizedRepurchaseAmountUsed" nillable="true" substitutionGroup="xbrli:item" type="xbrli:monetaryItemType" xbrli:balance="credit" xbrli:periodType="instant"/> |
| <xsd:element id="ppih_SupplementalBalanceSheetInformationRelatedToLeasesTableTextBlock" name="SupplementalBalanceSheetInformationRelatedToLeasesTableTextBlock" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_SupplementalCashFlowInformationRelatedLeasesTableTextBlock" name="SupplementalCashFlowInformationRelatedLeasesTableTextBlock" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_TransferredAtPointInTimeUsingInputMethodMember" name="TransferredAtPointInTimeUsingInputMethodMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_TransferredAtPointInTimeUsingOutputMethodMember" name="TransferredAtPointInTimeUsingOutputMethodMember" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:domainItemType" xbrli:periodType="duration"/> |
| <xsd:element id="ppih_WeightedaverageLeaseTermsAndDiscountRatesTableTextBlock" name="WeightedaverageLeaseTermsAndDiscountRatesTableTextBlock" nillable="true" substitutionGroup="xbrli:item" type="dtr-types:textBlockItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-10-leases-lease-costs-details" name="statement-statement-note-10-leases-lease-costs-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-10-leases-maturities-of-lease-liabilities-details" name="statement-statement-note-10-leases-maturities-of-lease-liabilities-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-10-leases-supplemental-balance-sheet-information-related-to-leases-details" name="statement-statement-note-10-leases-supplemental-balance-sheet-information-related-to-leases-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-10-leases-supplemental-cash-flow-information-related-to-leases-details" name="statement-statement-note-10-leases-supplemental-cash-flow-information-related-to-leases-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-10-leases-tables" name="statement-statement-note-10-leases-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-10-leases-weightedaverage-lease-terms-and-discount-rates-details" name="statement-statement-note-10-leases-weightedaverage-lease-terms-and-discount-rates-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-11-restricted-cash-summary-of-cash-cash-equivalents-and-restricted-cash-details" name="statement-statement-note-11-restricted-cash-summary-of-cash-cash-equivalents-and-restricted-cash-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-11-restricted-cash-tables" name="statement-statement-note-11-restricted-cash-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-14-treasury-stock-repurchases-of-common-stock-details" name="statement-statement-note-14-treasury-stock-repurchases-of-common-stock-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-14-treasury-stock-tables" name="statement-statement-note-14-treasury-stock-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-4-revenue-recognition-reconciliation-of-the-cost-in-excess-of-billings-details" name="statement-statement-note-4-revenue-recognition-reconciliation-of-the-cost-in-excess-of-billings-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-4-revenue-recognition-revenues-by-revenue-class-details" name="statement-statement-note-4-revenue-recognition-revenues-by-revenue-class-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-4-revenue-recognition-tables" name="statement-statement-note-4-revenue-recognition-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-6-impairment-of-longlived-assets-goodwill-details" name="statement-statement-note-6-impairment-of-longlived-assets-goodwill-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-6-impairment-of-longlived-assets-tables" name="statement-statement-note-6-impairment-of-longlived-assets-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-7-stockbased-compensation-restricted-stock-activity-details" name="statement-statement-note-7-stockbased-compensation-restricted-stock-activity-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-7-stockbased-compensation-stock-option-activity-details" name="statement-statement-note-7-stockbased-compensation-stock-option-activity-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-7-stockbased-compensation-stockbased-compensation-expense-details" name="statement-statement-note-7-stockbased-compensation-stockbased-compensation-expense-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-7-stockbased-compensation-tables" name="statement-statement-note-7-stockbased-compensation-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-8-earnings-per-share-summary-of-earnings-per-share-details" name="statement-statement-note-8-earnings-per-share-summary-of-earnings-per-share-details" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-note-8-earnings-per-share-tables" name="statement-statement-note-8-earnings-per-share-tables" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| <xsd:element abstract="true" id="ppih_statement-statement-significant-accounting-policies-policies" name="statement-statement-significant-accounting-policies-policies" nillable="true" substitutionGroup="xbrli:item" type="xbrli:stringItemType" xbrli:periodType="duration"/> |
| </xsd:schema> |